`Öz` blokları ile geçiş yap korur
Bu soru çok basit korkarım, ama blok içine alıyorsanız Objective-C programcıları çok alakalı olduğunu düşünüyorum.
Duyduğum blokları yerel değişkenler *2 kopya olarak içinde başvurulan yakalama beri, bir blok içinde* 3 *kullanarak bir döngü korumak, bu bloğu kopyalanmalıdır neden olabilir. Yani, __block
blok doğrudan kopyalanan yerine self
ile başa çıkmak için güç kullanmak gerekiyor.
__block typeof(self) bself = self;
[someObject messageWithBlock:^{ [bself doSomething]; }];
yerine sadece
[someObject messageWithBlock:^{ [self doSomething]; }];
Bilmek istediğim şudur: eğer bu doğruysa, çirkinlik (GC kullanma dışında) önlemek için bir yolu var mı?
CEVAP
Açık konuşmak gerekirse, sabit bir kopyasını aslında bu sorun ile ilgisi yok. Bloklar oluşturulurken n-c yakalanan değerleri korur. Sadece sabit bir kopya sorunu için geçici çözüm bu sorunu korumak için geçici çözüm aynı olur; yani, bu değişken için __block
Depolama sınıfı kullanarak.
Her durumda, soru cevap, burada gerçek bir alternatif yok. Kendi tabanlı blok API dizayn ediyorsun, ve bir anlamda bunu yaparsa, bağımsız değişken olarak self
değeri geçmiş olsun blok olabilir. Ne yazık ki, bu çoğu API için bir anlam ifade etmiyor.
Lütfen ıvar başvuran aynı sorunu olduğunu unutmayın. Eğer senin bloğunda bir ıvar başvurmak gerekiyorsa, ya da bir özelliği kullanmak yerine, ya da bself->ivar
kullanın.
, __block
YAY olarak derleniyor artık devir korumak tatili ne Zaman. ek: Eğer ARC derlemek için, __weak
__unsafe_unretained
yerine kullanmanız gerekir.
Eclipse: geçiş durumunda otomatik tama...
Devre dışı öznitelik geçiş giriş jQuer...
Nasıl numarasını veritabanları geçiş y...
Nerede doxygen H iç bir kütüphane blok...
Cassandra MySQL geçiş - /Artıları Eksi...