【发布时间】:2011-02-12 12:24:54
【问题描述】:
假设我有一个列出 100 个 Foo 对象的 tableview 类。它有:
@property (nonatomic, 保留) NSMutableArray* fooList;然后我用 Foos 填充它:
self.fooList = [NSMutableArray 数组]; 而(某事){ Foo* foo = [[Foo alloc] init]; [fooList addObject:foo]; [foo 释放]; }第一个问题:因为NSMutableArray被标记为retain,是不是里面的所有对象也都被retain了?我是否正确添加了 foo 并在将其添加到数组后释放了本地副本?还是我错过了保留电话?
然后,如果用户选择表中的一个特定行并且我想显示我调用的详细 Foo 视图:
FooView* localView = [[FooView alloc] initWithFoo:[self.fooList objectAtIndex:indexPath.row]]; [self.navigationController pushViewController:localView Animation:YES]; [本地视图发布];现在 FooView 类有:
@property (nonatomic, 保留) Foo* theFoo;所以现在数组都保留了 Foo 以及 FooView。但这似乎没问题吧?当用户点击后退按钮时,将在 FooView 上调用 dealloc 并调用 [theFoo release]。然后按下另一个后退按钮并在 tableview 类上调用 dealloc 并调用 [fooList release]。
你可能会争辩说 FooView 类应该有:
@property (nonatomic, assign) Foo* theFoo;对比保持。但有时 FooView 类是用不在数组中的 Foo 调用的。所以我想确保让两个对象保持在同一个对象上是可以的。
【问题讨论】:
标签: iphone objective-c cocoa