假设我有一个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