2012-12-01 54 views
0

我是新來的集合編程,所以我面臨這個問題。任何幫助將被感謝...NSArray不需要的釋放

我在一個類初始化一個NSArray實例初始化(我已經在頭文件中定義爲該類的屬性,所以ia必須可以訪問它在該類實現的任何地方),並分配一些對象與它 +(NSArray*) arrayWithObjects: ;。 init方法中的每一件事情都很好,但是,...

當我想在更新方法應用程序崩潰時使用該數組時,因爲該數組DEALLOCATED

爲什麼數組被解除分配?我如何防止它?

謝謝。

+0

您使用ARC嗎? – 2012-12-01 20:35:47

+0

你的財產「強大」? – Mark

+0

謝謝菲拉斯......它工作。 – Ahmadhp

回答

1

如果要初始化數組這樣,

objects = [NSArray arrayWithObjects: buttonOne, buttonTwo, 
            textField, nil]; 

它的傳統方法,它只是一個時間的對象訪問後自動釋放對象。相反,你可以retain的對象,或者您可以分配,如果你沒有使用ARC,那麼你應該用initWithObjects初始化它像

objects = [NSArray alloc] initWithObjects: buttonOne, buttonTwo, 
            textField, nil]; 
+0

假定無弧env。否則這可能不是解決方案 –

+1

@ Daij-Djan使用'alloc'和'init'本身並不假定非ARC。 – 2012-12-01 20:59:06

+0

@ H2CO3對,編輯我的評論 –

1

您應該用alloc NSArray並使用-initWithObjects方法代替。

NSArray* tempArray = [[NSArray alloc] initWithObjects:(id), ..., nil]

+0

假設無弧env。否則這可能不是一個解決方案 –

2

初始化,然後保留。
如果您使用ARC,可能它只是一個弱引用。當您聲明屬性時,使其成爲一個強有力的參考。