SORU
4 Aralık 2010, CUMARTESİ


`Ö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
4 Aralık 2010, CUMARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 99being99

    99being99

    2 EYLÜL 2008
  • Day9TV

    Day9TV

    22 NİSAN 2010
  • wowchick16

    wowchick16

    17 Mart 2007