jedes Mal, wenn ich in einem Block wie diese eine globale var oder Eigentum verwenden:die Vermeidung der „Erfassung selbst stark in diesem Block wird wahrscheinlich zu einem behalten Zyklus führen“ Nachricht
self.save = ^(){
if (isItSaving == NO) {
[self saveMyFile];
}
};
ich neu zu schreiben dies wie
BOOL *iis = isItSaving;
id myself = self;
self.save = ^(){
if (iis == NO) {
[myself saveMyFile];
}
};
oder Xcode wird sich beschweren, „selbst stark in diesem Block die Erfassung wird wahrscheinlich zu einem behalten Zyklus führen ...
Es beschwert sich sogar über BOOL Variablen?
Alles neu deklarieren, bevor ein Block erscheint, ist eine lahme Lösung.
Ist das der richtige Weg? Gibt es einen eleganten Weg?
Dieses Zeug ist hässlich. Ich benutze ARC.
Mann, das ist hässlich wie die Hölle. Alles neu deklarieren zu müssen ... danke. – SpaceDog
@MarkAmery Ja, Clang fängt immer mehr an. Und es ist richtig, die Lebensdauer des einschließenden Objekts sollte mindestens bis zum Ende des Blocks verlängert werden. Editing ... –
@NikolaiRuhe * "die Lebensdauer des einschließenden Objekts sollte mindestens bis zum Ende des Blocks verlängert werden" * - nett, habe ich zunächst keinen Grund bemerkt, warum ich einen starken Bezug auf 'self' innerhalb des Blocks habe wäre besser als "__unsafe_unreteted", aber dieser Satz allein macht es unglaublich klar. Es könnte sich sogar lohnen, die beiden Ansätze in Ihrer Antwort zu vergleichen, wenn Sie es wünschen. –