【发布时间】:2011-07-28 09:20:00
【问题描述】:
我刚刚开始使用街区和 Grand Central Dispatch。我被告知(并在Apple Documentation 中阅读)从块中引用的任何对象都会被保留。
例如:
^{
self.layer.transform = CATransform3DScale(CATransform3DMakeTranslation(0, 0, 0), 1, 1, 1);
self.layer.opacity = 1;
}
"self" 被保留,所以它会泄漏。为避免这种情况,我需要将 self 分配给:
__block Object *blockSelf = self;
然后在我的块中使用blockSelf 而不是self。
我的问题是:当您的块有更多代码并引用多个对象时会发生什么?我需要将它们全部分配给__block 对象吗?例如:
^{
[self doSomething];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"prevName == %@", artistName];
[request setEntity:entity];
[request setPredicate:predicate];
Object *newObject = [[Object alloc] init];
[someArray addObject];
[newObject release];
}
【问题讨论】:
标签: iphone memory-management ios4 retain objective-c-blocks