即使是自我,对象仍然自动释放

时间:2009-09-30 15:28:27

标签: objective-c iphone cocoa-touch xcode memory-management

关于这个帖子Why does 'self' protect memory space?,我正在使用'self'来访问aArray。然而,我仍然在didSelectRowAtIndexPath:方法中得到一个无效的对象。

在根控制器中,我像这样访问aArray:

MyAppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];  
NSString *aKey = [theDelegate.aArray objectAtIndex:0];

这会与aArray失去参考有关吗?为什么它不会出现在cellForRowAtIndexPath中:(在MyAppDelegate之外首次使用它)?

2 个答案:

答案 0 :(得分:2)

这个问题没有意义。或者,相反,答案仍然是“阅读并理解与您的其他问题的答案相关联的文档”。

具体做法是:

内存管理没有神奇之处。自我与任何其他类型的对象引用没有什么特别之处。点符号只是方法调用的简写;也没什么特别的。

在你了解这些事情之前,你会追逐鬼魂,而不是真正解决代码中的实际问题。

答案 1 :(得分:1)

如果aArray是设置为保留的属性,那么您可能会在某处过度释放它。在你的问题中似乎并不完全清楚,但如果索引0处的对象无效,则可能是过度释放。如果您在Snow Leopard上使用Xcode 3.2,您可能需要确保使用Clang静态分析仪。它可以帮助找到这样的过度发布。