ogni volta che devo usare una var globale o una proprietà all'interno di un blocco come questo:Evitando il "sé catturare con forza in questo blocco rischia di portare ad un ciclo di mantenere" un messaggio
self.save = ^(){
if (isItSaving == NO) {
[self saveMyFile];
}
};
devo riscrivere questo come
BOOL *iis = isItSaving;
id myself = self;
self.save = ^(){
if (iis == NO) {
[myself saveMyFile];
}
};
o Xcode si lamenta "la cattura di sé con forza in questo blocco rischia di portare ad un ciclo di mantenere ...
Si lamenta anche sulle variabili BOOL?
Ridire tutto prima di un blocco sembra essere una soluzione zoppa.
È questo il modo corretto? C'è un modo elegante?
Questa roba è brutta. Sto usando ARC.
uomo, questo è brutto da morire. Dovendo ridichiarare tutto ... grazie. – SpaceDog
@MarkAmery Sì, clang cattura sempre più problemi. Ed è corretto, la durata dell'oggetto che racchiude deve essere estesa almeno fino al termine del blocco. Modifica ... –
@NikolaiRuhe * "la durata dell'oggetto che racchiude deve essere estesa almeno fino a che il blocco non termina" * - bello, non ho notato a priori alcun motivo per cui creare un forte riferimento a 'self' all'interno del blocco sarebbe preferibile usare '__unsafe_unretained', ma questa frase lo rende incredibilmente chiaro. Potrebbe anche valere la pena confrontare i due approcci nella tua risposta, se lo desideri. –