关于这个帖子Why does 'self' protect memory space?,我正在使用'self'来访问aArray。然而,我仍然在didSelectRowAtIndexPath:方法中得到一个无效的对象。
在根控制器中,我像这样访问aArray:
MyAppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];
NSString *aKey = [theDelegate.aArray objectAtIndex:0];
这会与aArray失去参考有关吗?为什么它不会出现在cellForRowAtIndexPath中:(在MyAppDelegate之外首次使用它)?
答案 0 :(得分:2)
这个问题没有意义。或者,相反,答案仍然是“阅读并理解与您的其他问题的答案相关联的文档”。
具体做法是:
内存管理没有神奇之处。自我与任何其他类型的对象引用没有什么特别之处。点符号只是方法调用的简写;也没什么特别的。
在你了解这些事情之前,你会追逐鬼魂,而不是真正解决代码中的实际问题。
答案 1 :(得分:1)
如果aArray
是设置为保留的属性,那么您可能会在某处过度释放它。在你的问题中似乎并不完全清楚,但如果索引0处的对象无效,则可能是过度释放。如果您在Snow Leopard上使用Xcode 3.2,您可能需要确保使用Clang静态分析仪。它可以帮助找到这样的过度发布。