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

  • Booredatwork.com

    Booredatwork

    5 Ocak 2009
  • tatermoog

    tatermoog

    2 AĞUSTOS 2006
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011