2013-08-29 47 views
0

在我的AppDelegate我宣佈一個NSMutableArray作爲一個屬性:如何停止我的AppDelegate中的NSMutableArray被釋放?

@property NSMutableArray *delegateValuableItems; 

,並在didFinishLaunchingWithOptions分配它:

self.delegateValuableItems = [[NSMutableArray alloc] initWithCapacity:3]; 

我在我的應用程序有多個視圖控制器,但只有一個訪問該屬性:

[appDelegate.delegateValuableItems addObject:@"a"]; 

先前已將AppDelegate定義爲視圖控制器中的屬性:

@property AppDelegate  *appDelegate; 

,並引用它在viewDidLoad中:

appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

我的問題是,如果應用程序被單獨留幾分鐘的NSMutableArray被釋放。

至少我認爲是。

如果我運行應用程序並馬上輸入所有細節,但是如果讓它運行幾分鐘[appDelegate.delegateValuableItems addObject:@"a"];不會將該對象添加到數組,則一切正常。

感謝您的幫助!

+1

可能是因爲iOS在10分鐘後睡覺了你的應用程序,它已經在後臺。你是否將你的應用程序發送到後臺?並確保你的屬性聲明爲強:'@property(nonatomic,strong)NSMutableArray delegateValuableItems' – lucaslt89

+0

當你嘗試添加它時,應用程序崩潰了嗎? –

+0

XCode 4.3默認情況下屬性變強。如果您使用的是早期版本,則需要編寫: @property(strong)NSMutableArray * delegateValuableItems; –

回答

0

如果您只想從一個類訪問delegateValuableItems,則該屬性應該只在該類中。但是,如果您想從整個應用程序訪問它,但要確保它始終是相同的實例(因爲如果您在應用程序委託中聲明它,可能是因爲您只需要一個應用程序實例) ,那麼你應該使用一個Singleton。

您應該擁有一個模型對象,它包含NSMutableArray,並且該模型應該是一個Singleton,以確保您始終訪問同一個NSMutableArray實例。

希望它有幫助!

+0

你說得對爲什麼我在AppDelegate中聲明它?我會嘗試一個單例。thx – UglyBlueCat

+0

好吧,在嘗試了一大堆無法正常工作並手動恢復代碼的事情後,我無法再現問題,但是我已經實現了反正單身,以防止復發,所以謝謝:) – UglyBlueCat

相關問題