我有一个 UITableView 的实例,以及一个遵循委托和数据源协议的单独类。我这样做是这样的:
SubjectTableViewHandler *handler = [[[SubjectTableViewHandler alloc] init] retain];
tv.delegate = handler;
tv.dataSource = handler;
[handler autorelease];
我不想将处理程序维护为 ivar,如果我retain
在最后取消调用,当autorelease
发生这种情况时,它会被发送release
,然后添加到池中,这会导致 EXC_BAD_ACCESS。所以目前,保留计数是:
(1) At init: 1
(2) At retain: 2
(3) delegate/datasource properties are 'assign', still 2
(4) At autorelease: 1, now in autorelease pool.
但是由于属性是“分配”的,它们永远不会被释放,保留计数永远不会达到 0,处理程序也永远不会被释放。有没有比将处理程序维护为 ivar 并在方法中释放它更有效的方法来实现这一点dealloc
?