ios-store ^block-dictionary oder array?
Kann ich speichern ^block in einem Wörterbuch oder ein array?
Ich hören muss, um eine server-Meldung, die ich brauche, um eine block zu Griff die Meldung, und in meinem Projekt mehrere view-Controller alle hören wollen, die Meldung, also habe ich einen generic-notification-manager, die Ihre eigenen block für die Handhabung von server-Meldung und es hat eine Reihe von Delegierten, so dass im manager-block:
- (^)(NSString *message){
for (delegate in allDelegates)
{
delegate.handlerBlock(message);
}
}
aber kann ich das speichern von Blöcken in einer Sammlung?
- In der Tat können Sie. Blöcke sind objective-c-Objekte, nur daran erinnern, um Sie zu kopieren aus dem Stapel zuerst.
- Was meinst du mit kopieren Sie Sie aus dem Stapel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die store-Objekt in die Sammlung. Sondern kümmern sich um den Bereich: Kopieren Sie, wenn Sie draußen gehalten werden, eine Funktion scope. Dies ist in Ihrem Fall, da Sie speichert Sie in einem array.
Auf dem BOGEN, Sie müssen noch sagen, es Sie unbedingt braucht, um kopieren Sie den block. Es sollte kurz die blockieren, wenn das array wird freigegeben.
Blöcke die Besonderheit, dass Sie kopiert werden soll, in den meisten Fällen, wenn andere Objekte aufbewahrt werden sollen. Wie müssen Sie gelesen haben von jetzt, ist dies, weil die Blöcke beginnen auf dem stack ("Stapel-block"), und ist nur gültig im lokalen Bereich, wo Sie definiert wurden. Kopieren einer stack-block gibt Ihnen einen heap-block, und das eine dynamische Lebensdauer wie normale Objekte. Kopieren heap bock wird einfach beibehalten, so ist es immer richtig, um einen block kopieren, wenn Sie müssen, halten Sie es für länger.
Nun Funktionen, die eine block-argument in der Regel die Verantwortung für das kopieren von Blöcken als erforderlich. So brauchen Sie nicht, etwas besonderes zu tun, wenn Sie übergeben einen block auf diese Funktionen. Jedoch, in diesem Fall bist du nebenbei dein block
[NSArray arrayWithObject:]
nimmt, die einem normalen Objekt-argument. Da es sich nicht nehmen, ein block-argument, es nicht wissen zu kopieren, das argument, so wird es nur behalten. Also, wenn Sie passieren einen block einer Methode mit einem normalen Objekt als argument, die Sie benötigen, kopieren Sie es zuerst.Finden Sie, wie Sie dies tun, wenn Sie beim Lesen sehr gute Artikel hier. Und beachten Sie insbesondere die "kopieren Sie Sie aus dem Stapel zu ersten" idiom dort erwähnt.