Böyle bir bloğunun içinde küresel bir değişken ya da özelliğini kullanmak zorunda her zaman "bu blokta kuvvetle yakalayan kendini bir tutmak döngüye yol açması muhtemeldir" böyle hatta BOOL değişkenleri hakkında şikayetmesajı
BOOL *iis = isItSaving;
id myself = self;
self.save = ^(){
if (iis == NO) {
[myself saveMyFile];
}
};
veya Xcode bir muhafaza döngüye yol açma ihtimali olan bu blokta kuvvetle kendini yakalayan" şikayet edecek ...?
Her şey bir bloktan önce tekrar ele alındığında topal bir çözüm olarak görünüyor.
Bu doğru yolu mu? Zarif bir yolu var mı?
Bu şeyler çirkin. ARC kullanıyorum.
adam, bu cehennem kadar çirkin. Her şeyi yeniden ilan etmek zorunda ... teşekkürler. – SpaceDog
@MarkAmery Evet, clang daha fazla sorun yakalar. Ve doğru, kapalı nesnenin ömrü en azından blok bitene kadar uzatılmalıdır. Düzenleme ... –
@NikolaiRuhe * "kapama nesnesinin ömrü en azından blok tamamlanana kadar uzatılmalıdır" * - güzel, ilk önce bloğun içinde 'self''e güçlü bir başvuru oluşturmanın herhangi bir nedenini fark etmedim __unsafe_unretained' işlevinin kullanılması tercih edilebilir, ancak bu ifade tek başına onu inanılmaz derecede netleştirir. İsterseniz, cevabınızdaki iki yaklaşımı bile karşılaştırabilirsin. –