iOS 4 GCD Fragen

Habe ich mir einige der Vorträge bilden WWDC 2010 und lese auch die meisten der Dokumente, die auf Blöcke und Parallelität und habe ein paar Fragen bezüglich der Verwendung von Bausteinen mit seriellen queues, die in "Grand Central Dispatch".
Ich habe eine iOS-4-Projekts, das hat eine scrollview und ein Wörterbuch mit Bild-Informationen - urls zu den Bildern und so weiter. Ich will GCD und blockiert den download der Bilder und steckte Sie in meine scrollview daher nicht die Sperrung der Haupt-thread. Ich habe geschrieben das folgenden code, der zu funktionieren scheint:

for (NSDictionary* dict in images)
{
     dispatch_async(image_queue, ^{

           NSString* urlString = [dict objectForKey:@"url"];
           NSURL* url = [NSURL URLWithString:urlString];
           NSData* imageData = [[NSData alloc] initWithContentsOfURL:url];
           UIImage* image = [UIImage imageWithData:imageData];
           UIImageView* imageView = //initialize imageView with image;      

           dispatch_async(dispatch_get_main_queue(), ^{
                [self.scrollView addSubview:imageView];
           });
           [imageData release];
      });
}

Habe ich zwei Fragen:

  1. Entsprechend der Parallelität guide sollte ich nicht erfassen Variablen aus dem umgebenden scope, die nicht skalaren Typen in meinem code, den ich erfassen dict ist ein NSDictionary* Objekt. Wenn ich bin nicht erlaubt, es zu erfassen, wie soll ich dann den code schreiben? Hat ein block nur zu erfassen, Variablen aus dem umgebenden scope, die tatsächlich genutzt werden?

  2. Was passiert, wenn ich die aktuellen ViewController, bevor alle Bilder abgerufen werden, die über die serielle dispatch queue? Ich glaube nicht, dass Sie sich bewusst sind, dass der ViewController das Sie Weg ist also, was passiert, wenn Sie ausführen, die Fertigstellung handler wo ich das Bild einfügen-Ansichten in meine scrollview auf dem Haupt-thread? Macht es einen Fehler, oder was? Und wie kann ich kündigen, alle übrigen Operationen auf die serielle queue, wenn meine ViewController verschwindet?

Beste Grüße,

  • Ich würde gerne sehen, einige best practices auf diese als gut.
InformationsquelleAutor blackpool | 2010-07-27
Schreibe einen Kommentar