假設我有一個tableview類,它列出了100個Foo對象。它具有:多個對象在Objective-C/Cocoa中保留相同的對象可以嗎?
@property (nonatomic, retain) NSMutableArray* fooList;
,我填滿它與FOOS像:
self.fooList = [NSMutableArray array]; while (something) { Foo* foo = [[Foo alloc] init]; [fooList addObject:foo]; [foo release]; }
第一個問題:因爲NSMutableArray中被標記爲保留,這意味着它裏面的所有的對象都保留嗎?我是否正確地添加foo並在將它添加到數組之後釋放本地副本?或者我錯過了保留電話?
然後,如果用戶選擇表中的一個特定的行,我想顯示一個細節美孚視圖我呼籲:現在
@property (nonatomic, retain) Foo* theFoo;
這樣既:
FooView* localView = [[FooView alloc] initWithFoo:[self.fooList objectAtIndex:indexPath.row]]; [self.navigationController pushViewController:localView animated:YES]; [localView release];
現在FooView類有數組保持着那個Foo以及FooView。但那似乎沒問題吧?當用戶點擊後退按鈕時,將在FooView上調用dealloc,並調用[theFoo release]。然後點擊另一個後退按鈕,在tableview類上調用dealloc,並調用[fooList release]。
你可能會認爲,FooView類應該有:
@property (nonatomic, assign) Foo* theFoo;
與保留。但是有時候FooView類會被一個不在數組中的Foo調用。所以我想確定兩個物體放在同一個物體上是可以的。
Typo:「...並在收集對象被釋放時釋放它們的內容對象。」 集合中的對象在釋放*之前不會被釋放。 – JeremyP 2010-04-27 08:57:39
謝謝,修復。雖然你可以爭辯說,通過「發佈」,我的意思是「最後一個版本,保留數量爲零,這會觸發dealloc」:P,但只是說在這種情況下dealloc更清晰。 – Jaanus 2010-04-27 15:23:56