• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何清除不指向自己代码的废弃内存?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:51:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

似乎我的应用程序正在放弃内存,因为记录的堆的持久内存不会降至零,并且当连续重复同一组操作时堆继续增长: enter image description here

为了找出问题,很多人建议Bill's site这对我没有用,因为我使用的是 ARC,而他指出了引用问题。然后我关注了Apple docs并观看了一些与 WWDC 的废弃内存有关的视频。他们都说工具将有助于指出可能导致问题的代码行。所以我检查了每一个对象,但没有看到任何与我的代码相关的内容:

enter image description here



Best Answer-推荐答案


我认为您需要明确查找保留周期。当在层次结构中,您有一个父对象对象,该对象具有相关对象并且都具有强类型的属性,它们永远不会从内存中释放。

快速示例:

@interface Parent : NSObject
@property (strong) Child *child;
@end
@interface Child : NSObject
@property (strong) Parent *parent;
@end

默认情况下属性是强的,所以如果你根本不声明它也是一样的。

应该是这样的:

@interface Parent : NSObject
@property (strong) Child *child;
@end
@interface Child : NSObject
@property (weak) Parent *parent;
@end

我还发现了 Instruments 可以向您显示保留周期的信息(而且看起来不错)。更多细节在这里How to activate Cycles reporting in Instruments under ARC?但是我不知道它是否适用于 ARC,评论可能表明它不适用。作为一种繁琐的方式,我建议您注释掉一些您认为可能负责的代码,然后检查图片。


这就是保留周期。您应该寻找的另一件事是当您分配 ARC 无法返回的内存时。这些调用看起来像 C 函数,并且按照惯例,名称中有一个单词 Create。每次你做出这样的指针时,你也应该自己清理。举几个例子:

  • CGColorCreate - CGColorRelease
  • CGColorSpaceCreateWithName - CGColorSpaceRelease
  • CGBitmapContextCreate - CGContextRelease

如您所见,每个函数都有其对应的发布函数,通常您应该能够在文档中找到。

关于ios - 如何清除不指向自己代码的废弃内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580883/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap