2009-09-30 53 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

這個問題沒有意義。或者,相反,答案仍然是「閱讀並理解與其他問題的答案相關的文檔」。

具體做法是:

沒有內存管理法寶。關於自身與其他任何類型的對象引用沒有什麼特別之處。點符號僅僅是方法調用的簡稱;也沒有什麼特別的。

直到你理解了這些東西,你纔會追逐幽靈,而不是真正解決代碼中的真實問題。

相關問題