iOS 4 Blöcke und behalten zählt

Ich fange gerade mit Blöcken und Grand Central Dispatch. Ich habe gesagt (und gelesen in den Apple-Dokumentation), dass alle referenzierten Objekts innerhalb eines Blocks wird beibehalten.

Zum Beispiel:

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

"selbst" wird beibehalten, so dass es Lecks. Um das zu vermeiden, muss ich ordnen Sie sich selbst zu:

__block Object *blockSelf = self;

und verwenden Sie dann blockSelf statt self in meinem block.

Meine Frage ist: was passiert, wenn Ihr block hat viel mehr code und Referenzen mehrere Objekte? Muss ich zuordnen, Sie alle zu __block Objekte? Zum Beispiel:

^{  
    [self doSomething];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"prevName == %@", artistName];
    [request setEntity:entity];
    [request setPredicate:predicate];

    Object *newObject = [[Object alloc] init];
    [someArray addObject];
    [newObject release];
}
InformationsquelleAutor samvermette | 2011-04-02
Schreibe einen Kommentar