2009-09-30 56 views
0

关于此发布Why does 'self' protect memory space?,我使用'自我'访问aArray。然而,我仍然在didSelectRowAtIndexPath:方法中得到一个无效的对象。即使对自己,对象仍然autoreleased

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

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

将有事可做与aArray失去其参考?为什么它不会出现在cellForRowAtIndexPath中:(第一次使用它在MyAppDelegate之外)?

回答

1

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

+0

是的 - 我正在运行Clang。索引零处的对象是有效的。 – 4thSpace 2009-09-30 16:39:41

+0

正在使用“分配”而不是“保留”。没有抓住它一段时间。问题解决了。 – 4thSpace 2009-10-01 01:35:43

+0

所以我想不是过度释放,而是保留不足。 – 2009-10-08 20:37:06

2

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

具体做法是:

没有内存管理法宝。关于自身与其他任何类型的对象引用没有什么特别之处。点符号仅仅是方法调用的简称;也没有什么特别的。

直到你理解了这些东西,你才会追逐幽灵,而不是真正解决代码中的真实问题。

相关问题