iOS 4 блокирует и сохраняет счетчики

Я только начинаю работать с блоками и Grand Central Dispatch. Мне сказали (и я прочитал в Документации Apple ), что любой объект, на который имеется ссылка из блока, сохраняется.

Например:

^{  
    self.layer.transform = CATransform3DScale(CATransform3DMakeTranslation(0, 0, 0), 1, 1, 1);
    self.layer.opacity = 1;
}

«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];
}

19
задан samvermette 14 September 2011 в 14:00
поделиться