作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
分析 SimpleEKDemo application from Apple 时我注意到有一些内存泄漏。
其中一个漏洞是 __NSArrayM,它在 Leaked Blocks 历史记录中有 3 行,Malloc/Assign/Release。
问题 - 有人可以指出问题的根本原因吗? (我正在尝试学习如何从创建泄漏对象的位置获取 Instruments 输出,然后从那里找出根本原因,所以这真的很有用)
最佳答案
您会注意到,当您运行带有泄漏的演示时,viewDidLoad
(负责的框架)中存在泄漏。如果切换到 Call Tree
详细信息并且启用了 Invert Call Tree
,您将看到与调用相关的泄漏 +[NSArray new]
。如果你稍微打开它,你会看到在 RootViewController
的 viewDidLoad
中调用的 initWithArray
。问题是,
self.eventsList = [[NSMutableArray alloc] initWithArray:0];
eventsList
是一个 retain
ed 属性,因此创建的对象的保留计数为 2。但是它只有 release
d 一次dealloc
中的 release
或通过重新分配 eventsList
。你必须自动释放这个对象。
self.eventsList = [[[NSMutableArray alloc] initWithArray:0] autorelease];
修复后,您应该不会收到任何错误。
关于iphone - 为什么 SimpleEKDemo 代码中存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6172510/
分析 SimpleEKDemo application from Apple 时我注意到有一些内存泄漏。 其中一个漏洞是 __NSArrayM,它在 Leaked Blocks 历史记录中有 3 行,
我是一名优秀的程序员,十分优秀!