2009-10-05 148 views
0

我一直在一個概念不太明白的概率上打破我的頭。說我在我的項目如下:從代表訪問對象的屬性

的AppDelegate MyClassA MyClassB MyViewController

在MyClassA,有一個由名稱CLASSB類型MyClassB的屬性。 MyClassB通過指針名稱myArray具有NSMutableArray類型的屬性。

當viewDidLoad中下MyViewController我實例MyClassA訪問myArray的在其(MyClassA的)MyClassB財產,如如下:

MyClassA *classA = [[MyClassA alloc] init]; 
NSLog([NSString stringWithFormat:@"%i", [[[classA classB] myArray] count]); 

這將成功地顯示在日誌中的次數,並在同一時間,進一步訪問數組的內容工作正常。

然而,仍然在MyViewController,當MyClassA被實例化並從委託訪問如下:

AppDelegate *aDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSLog([NSString stringWithFormat:@"%i", [[[aDelegate classA] classB] myArray] count]]); 

日誌仍然會顯示計數成功,進一步訪問的內容數組失敗,顯示沒有錯誤,但「當前語言:auto當前目標-c」 - 只是它的一行。

這是一個奇怪的行爲,我無法確定。訪問在委託中實例化的對象並在函數中本地訪問對象(在ViewController的viewDidLoad中,如示例中)還是有所不同?

幫助是非常讚賞= d

回答

1

這聽起來像您的應用程序崩潰是由於訪問已經被釋放的內存。如果您想進一步檢查,我建議您將NSZombieEnabled環境變量設置爲YES(在XCode的可執行設置中)。

在這種特殊情況下,最好知道委託的classA成員變量是如何初始化的以及它如何被訪問。也許任何變量(無論是classA,classB還是myArray)都是自動發佈的(或者使用便捷方法創建的),而不是保留。然後你可以訪問這個成員變量,直到autorelease池下次被排空。

+0

確保「主動配置」設置爲「調試」,以便更好地檢查中斷點。 – Jordan 2009-10-05 17:19:39