Als «objective-c-blocks» getaggte Fragen

Blöcke sind Apples Implementierung von Closures für C, die auch für Objective-C und C ++ verfügbar sind.


8
Was bedeutet das Schlüsselwort "__block"?
Was genau macht das __block Schlüsselwort in Objective-C? Ich weiß, dass Sie damit Variablen innerhalb von Blöcken ändern können, aber ich würde gerne wissen ... Was genau sagt es dem Compiler? Tut es noch etwas? Wenn das alles ist, warum wird es dann überhaupt benötigt? Ist es irgendwo in den …

8
Weisen Sie einer Variablen außerhalb eines Blocks eine Variable innerhalb eines Blocks zu
Ich erhalte eine Fehlermeldung Variable ist nicht zuweisbar (fehlender __block-Typbezeichner) auf der Linie aPerson = participant;. Wie kann ich sicherstellen, dass der Block auf die aPersonVariable zugreifen und die aPersonVariable zurückgegeben werden kann? Person *aPerson = nil; [participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { Person *participant = (Person*)obj; if …


7
Syntaxliste für Blockdeklarationen
Die Blocksyntax in Ziel C (und tatsächlich in C, nehme ich an) ist notorisch inkongruent. Das Übergeben von Blöcken als Argumente sieht anders aus als das Deklarieren von Blöcken als ivars, was anders aussieht als das Blockieren von typedefBlöcken. Gibt es eine umfassende Liste der Blockdeklarationssyntax, die ich zur schnellen …


10
Warten Sie, bis zwei asynchrone Blöcke ausgeführt wurden, bevor Sie einen weiteren Block starten
Bei Verwendung von GCD möchten wir warten, bis zwei asynchrone Blöcke ausgeführt und ausgeführt wurden, bevor wir mit den nächsten Ausführungsschritten fortfahren. Was ist der beste Weg das zu tun? Wir haben Folgendes versucht, aber es scheint nicht zu funktionieren: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ …

9
Zyklus mit Blöcken auf "Selbst" halten
Ich fürchte, diese Frage ist ziemlich einfach, aber ich denke, sie ist für viele Objective-C-Programmierer relevant, die in Blöcke geraten. Was ich gehört habe ist, dass, da Blöcke lokale Variablen erfassen, auf die in ihnen als constKopien verwiesen wird , die Verwendung selfinnerhalb eines Blocks zu einem Aufbewahrungszyklus führen kann, …

6
Wann soll enumerateObjectsUsingBlock vs. für verwendet werden?
Neben den offensichtlichen Unterschieden: Verwenden enumerateObjectsUsingBlockSie diese Option, wenn Sie sowohl den Index als auch das Objekt benötigen Nicht verwenden, enumerateObjectsUsingBlockwenn Sie lokale Variablen ändern müssen (ich habe mich geirrt, siehe bbums Antwort) Wird enumerateObjectsUsingBlockallgemein als besser oder schlechter angesehen, wann for (id obj in myArray)auch funktionieren würde? Was sind …

5
Deklarieren Sie einen Blockmethodenparameter ohne typedef
Ist es möglich, einen Methodenblockparameter in Objective-C anzugeben, ohne ein typedef zu verwenden? Es muss wie Funktionszeiger sein, aber ich kann die Gewinnsyntax nicht treffen, ohne ein Zwischen-Typedef zu verwenden: typedef BOOL (^PredicateBlock_t)(int); - (void) myMethodTakingPredicate:(PredicateBlock_t)predicate nur die oben genannten Kompilierungen, alle diese schlagen fehl: - (void) myMethodTakingPredicate:( BOOL(^block)(int) ) …


7
Speichern Sie einen Abschluss als Variable in Swift
In Objective-C können Sie die Ein- und Ausgabe eines Blocks definieren, einen der Blöcke speichern, die an eine Methode übergeben wurden, und diesen Block später verwenden: // in .h typedef void (^APLCalibrationProgressHandler)(float percentComplete); typedef void (^APLCalibrationCompletionHandler)(NSInteger measuredPower, NSError *error); // in .m @property (strong) APLCalibrationProgressHandler progressHandler; @property (strong) APLCalibrationCompletionHandler completionHandler; …

7
Alternativen zu dispatch_get_current_queue () für Abschlussblöcke in iOS 6?
Ich habe eine Methode, die einen Block und einen Abschlussblock akzeptiert. Der erste Block sollte im Hintergrund ausgeführt werden, während der Abschlussblock in der Warteschlange ausgeführt werden sollte, in der die Methode aufgerufen wurde. Für letztere habe ich immer verwendet dispatch_get_current_queue(), aber es scheint, dass es in iOS 6 oder …

4
Was ist der Unterschied zwischen einer __schwachen und einer __blockischen Referenz?
Ich lese die Dokumentation von Xcode und hier ist etwas, das mich verwirrt: __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; Folgendes wird aus der Dokumentation kopiert: Ein Block bildet einen starken Verweis auf Variablen, die er erfasst. Wenn Sie selfinnerhalb eines Blocks verwenden, bildet der Block …


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.