2012-12-05 73 views
0

我試圖創建objetive下的可變數組來保存對對象的引用。數組中的對象通過用戶交互定期更新,我希望數組能夠自動反映對象發生的更改。有誰知道是否有辦法做到這一點?也許存儲指向對象的指針而不是數組中的對象本身?任何幫助,將不勝感激創建的NSMutableArray持有指針

在此先感謝

編輯:我要提的是,對象是不完全被這個詞的嚴格意義上的更新。他們正在重新初始化。用於離如果我有一控制器:

myController的= [ALLOC myController的] initWith .....]]

上述呼叫與不同初始化參數再次進行。

+0

數組只是存儲數據的容器。您需要爲每個將接收更新的對象設置一個委託。 – Max

回答

4

該數組總是存儲指針....它擁有強烈的引用或發送一個保留消息(如果使用非ARC)。

所以

[myMutableArray addObject: anObject]; 

增加了指針。

如果您現在更改anObject的屬性並稍後通過該數組訪問它,那麼 將爲您提供指向僅通過其屬性更改的對象的指針。

編輯:

不,如果您分配/初始化,您要創建一個新的對象實例並在堆上爲它分配新的內存(即,它的另一個指針到一個新的內存地址) 。 你究竟想要完成什麼?如果你提供更多的細節,肯定有辦法。

如果您分配/初始化與同一類對象,爲什麼不創建一個方法來改變對象的屬性:

而不是

myObject = [[MyClass alloc] initWithParameter1: one parameter2: two]; 

您可以創建更改這些屬性的方法:

[myObject updateParameter1: anotherOne parameterTwo: anotherTwo]; 

,當然,一個可變數組的好處是,你可以改變它的內容,所以像@Eli格雷戈裏指出,可以更換與另一個對象(或者說指向它的指針)。

+0

我相信OP的問題是創建一個新實例,不僅僅是改變同一個對象的屬性(他稱之爲「重新初始化」)。 – Taum

+0

即時通訊不知道它是否是一個新的實例,但它被分配到相同的屬性 –

+0

本質上,我有一個頁面控制器的數組。一旦用戶在該頁面上編輯了一個單元格並返回頁面,每個控制器都會重新初始化,並顯示新的數據,例如根據用戶的響應顯示更多單元格。我希望能夠保持這些控制器的數組引用正確的對象 –

0

因爲你想指向一個新分配和初始化的對象,你不能'更新'指針,你可以做的是用指定的索引'新'替換指針。

你可以用它來做到這一點的方法是:

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject 

所以它看起來是這樣的:

NewViewController *new = [[NewViewController alloc] init..]; 
[myArray replaceObjectAtIndex:x withObject:new]; 
+0

是的,但然後我會需要對數組中陳舊的條目的引用,以便用新的引用替換它 –