【问题标题】:Memory management in ipad/iphone appipad/iphone 应用程序中的内存管理
【发布时间】:2011-02-07 00:45:10
【问题描述】:

我有一个应用程序,在我看来内存没有被释放,但我不确定如何分析这个问题。

xcode 中的“分析”未显示任何问题,“仪器”未显示任何内存泄漏。

据我所见,不建议看retain counts。

如何找到有问题的对象?我已将打印输出添加到对象的“dealloc”方法中,但没有看到正在调用它。

更新

我现在明白了

objc[69139]: FREED(id): message retainCount sent to freed object=0x5422420

有没有一种简单的方法可以找出这是哪个对象? “分析”不会报告任何无效版本。

【问题讨论】:

  • 您必须发布一些代码以供任何人提供帮助。如果我们自己无法看到,我们无法告诉您出了什么问题。
  • 这只是一个关于调试技术的一般问题。

标签: iphone debugging memory-management memory-leaks ipad


【解决方案1】:

我建议搜索您的代码并找到每个 init/alloc 语句。然后,验证每个对象是否正确释放。如果你有一个问题,你可能有更多。最初可能看起来成本很高,但它可能会在修复错误方面得到回报。

需要注意的一件大事是来自您也在设置的笔尖的引用。很容易让那些不被释放。我发现确保没有内存错误的最简单方法是将它们声明为:

@property (nonatomic, retain) IBOutlet UILabel *message;

然后确保 dealloc 类似于:

- (void)dealloc {
    self.message = 0;
    [super dealloc];
}

前段时间我做了这两个,我所有的记忆错误都清除了。

【讨论】:

  • 谢谢 - 开始手动扫描...我实际上没有任何笔尖,所以我想我可以把它划掉...
  • self.message = 0 应该是 [message release]。另外,使用nil 清除指针。
  • 实际上,它按原样工作。分配 0/nil 将导致旧值被释放。
  • 是的,但这不是一种常见的模式,与其他代码相比看起来很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多