【发布时间】:2012-01-04 08:17:17
【问题描述】:
在我的代码中分配一个对象是一种常见的模式,让它用一个完成处理程序做一些事情并在处理程序中释放它:
LongOperation *foo = [[LongOperation alloc] init];
[foo runWithCompletion:^{
// run some code and then:
[foo autorelease];
}];
这工作得很好,但是当我尝试将代码转换为 ARC 时,Xcode 正确地抱怨它不能简单地从块中删除 autorelease,因为这会使 foo 对象在离开后被释放范围。
那么在 ARC 下写这种模式有什么好的方法呢?我可以为foo 引入一个实例变量:
[self setFoo:[[LongOperation alloc] init]];
[foo runWithCompletion:^{
// run some code and then:
[self setFoo:nil];
}];
…但代码将不再可重入。
【问题讨论】:
标签: objective-c memory-management automatic-ref-counting objective-c-blocks