2012-05-12 64 views
0

我有一個模型類。當我調用方法「setter」時,我將一些String值設置爲我的對象的屬性。在設置屬性後,該方法將返回存儲在NSMutableArray *eintraegeSortiert中的新對象。刪除或重新定位指針

現在,我需要一個新的對象。我想我必須刪除指針並重新設置它。如果我不移除指針,那麼存儲在可變數組中的所有對象都會改變,並且我已經在該可變數組中存儲了相同的對象100次。我嘗試了多種方式,但沒有把它做好。我究竟做錯了什麼?我的代碼:

NSMutableArray *eintraegeSortiert = [NSMutableArray array]; 
for (int i = 0; i < ([mArray count]/11) ; i++) { 
     Vertretung *vertretung = [[Vertretung alloc] init]; 
     [eintraegeSortiert addObject:[self setter:mArray :vertretung]]; 
    } 
+0

你能解釋一下多一點點,你是什麼意思通過刪除指針,亞光解釋一步一步,您每次都創建一個新對象。 – zahreelay

回答

1

我想你沒有真正理解如何代碼你寫的作品。讓我們來看看它:

NSMutableArray *eintraegeSortiert = [NSMutableArray array]; 

創建一個新的可變數組並將其分配給eintraegeSortiert

for (int i = 0; i < ([mArray count]/11) ; i++) { 

我們將循環[mArray count]/11

NSMutableArray *eintraegeSortiert = [NSMutableArray array]; 
for (int i = 0; i < ([mArray count]/11) ; i++) { 
    Vertretung *vertretung = [[Vertretung alloc] init]; 
    [eintraegeSortiert addObject:[self setter:mArray :vertretung]]; 
} 

所以一步一步倍。

Vertretung *vertretung = [[Vertretung alloc] init]; 
[eintraegeSortiert addObject:[self setter:mArray :vertretung]]; 

現在,這被稱爲vertretung當前範圍內創建變量。您致電alloc/init。這將返回一個指向新的Vertretung對象的指針。例如,這可能在內存位置0x12345678。然後將其添加到數組中。

然後我們到達當前作用域的末尾,然後繞着for-loop循環。這意味着變量vertretung超出了範圍。

然後當你再次循環時,同樣的代碼會一次又一次地運行。但現在alloc/init將創造一個全新的Vertretung對象(也許指向的內存位置0xabcdef00並添加到陣列中。

所以,不,它不是被添加到陣列多次同一個對象。

不知道發生了什麼事在setter:: - 也許張貼,以及如果你仍然有問題,

+0

我認爲你是對的,我發現了一個錯誤,我記錄了內存,它不是同一個對象,一遍又一遍地顯示,將你的答案標記爲正確答案。 – ezcoding

0
NSMutableArray *eintraegeSortiert = [NSMutableArray array]; 
for (int i = 0; i < ([mArray count]/11) ; i++) { 
     Vertretung *vertretung = [[Vertretung alloc] init]; 
     [eintraegeSortiert addObject:[self setter:mArray :vertretung]]; 
     [vertretung release]; 
     vertretung=nil; 

} 
+0

不是他正在使用ARC。而'vertretung = nil;'是無關緊要的。 – mattjgalloway

+1

我正在使用ARC。我試過這個。我不能這樣做:( – ezcoding