Warum null - / NULL-Blöcke Ursache bus-Fehler bei der Ausführung?

Begann ich mit blocks a Menge und bald gemerkt, dass der null-Blöcke Ursache bus-Fehler:

typedef void (^SimpleBlock)(void);
SimpleBlock aBlock = nil;
aBlock(); //bus error

Scheint dies, gegen das übliche Verhalten von Objective-C ignoriert, dass Nachrichten, die zu null-Objekte:

NSArray *foo = nil;
NSLog(@"%i", [foo count]); //runs fine

Deshalb habe ich Rückgriff auf die üblichen null prüfen, bevor ich mit einem block:

if (aBlock != nil)
    aBlock();

Oder verwenden Sie dummy-Blöcke:

aBlock = ^{};
aBlock(); //runs fine

Gibt es eine andere Möglichkeit? Gibt es einen Grund, warum null-Blöcke konnte nicht einfach ein nop?

InformationsquelleAutor zoul | 2010-11-10

Schreibe einen Kommentar