ipad/iphone应用程序中的内存管理
我有一个应用程序,在我看来,内存没有被释放,但我不知道如何分析这个问题 xcode中的“分析”显示没有问题,“仪器”也没有显示任何内存泄漏 据我所知,不建议查看保留计数 如何找到有问题的对象?我已将打印输出添加到对象的“dealloc”方法中,但没有看到正在调用它 更新 我现在明白了 objc[69139]:FREEDid:发送到已释放对象的消息retainCount=0x5422420 有没有一个简单的方法来找出这是哪一个物体?ipad/iphone应用程序中的内存管理,iphone,debugging,memory-management,memory-leaks,ipad,Iphone,Debugging,Memory Management,Memory Leaks,Ipad,我有一个应用程序,在我看来,内存没有被释放,但我不知道如何分析这个问题 xcode中的“分析”显示没有问题,“仪器”也没有显示任何内存泄漏 据我所知,不建议查看保留计数 如何找到有问题的对象?我已将打印输出添加到对象的“dealloc”方法中,但没有看到正在调用它 更新 我现在明白了 objc[69139]:FREEDid:发送到已释放对象的消息retainCount=0x5422420 有没有一个简单的方法来找出这是哪一个物体? “Analyze”不会报告任何无效版本。我建议搜索您的代码并查找
“Analyze”不会报告任何无效版本。我建议搜索您的代码并查找每个init/alloc语句。然后,验证每个对象是否已正确释放。如果你有一个问题,你可能会有更多的问题。起初,这似乎成本很高,但很可能会在修复bug后得到回报 需要注意的一件大事是来自NIB的引用,您也正在设置这些引用。让那些没有被释放的人很容易。我发现确保没有内存错误的最简单方法是声明它们,如下所示:
@property (nonatomic, retain) IBOutlet UILabel *message;
- (void)dealloc {
self.message = 0;
[super dealloc];
}
然后确保dealloc类似于:
@property (nonatomic, retain) IBOutlet UILabel *message;
- (void)dealloc {
self.message = 0;
[super dealloc];
}
不久前我做了这两件事,我所有的内存错误都被清除了。您必须发布一些代码,以便任何人都能提供帮助。我们无法在自己看不到的情况下告诉您出了什么问题。这只是一个关于调试技术的一般性问题。谢谢-开始手动扫描。。。实际上我没有任何笔尖,所以我想我可以把它划掉…self.message=0应该是[message release]。另外,使用nil清除指针。实际上,它是按原样工作的。分配0/nil将导致释放旧值。是的,但这不是一种常见模式,与其他代码相比看起来很奇怪。