Я только начинаю с блоков и Grand Central Dispatch. Мне сказали (и прочитали в Apple Documentation), что любой объект, на который ссылается внутри блока, сохраняется.
Например:
^{
self.layer.transform = CATransform3DScale(CATransform3DMakeTranslation(0, 0, 0), 1, 1, 1);
self.layer.opacity = 1;
}
"я" получает, поэтому он течет. Чтобы этого избежать, мне нужно назначить себе:
__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];
}