SORU
2 AĞUSTOS 2012, PERŞEMBE


__Zayıf __engellemek başvuru arasındaki fark nedir?

Böyle büyük mükafat belgeleri okuyorum, ve burada bir şey kafamı karıştırıyor:

__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
    [tmpSelf doSomething];
}];

Aşağıdaki belgelerine kopyalanır:

Bir blok değişkenleri için güçlü bir başvuru formlarını yakalar. Eğer kullanırsanız Bir blok içinde self blok self, güçlü bir referans eğer öyleyse formlar self da engellemek için güçlü bir referans vardır Genellikle ( yok), güçlü bir referans döngü sonuçları. Döngüsü önlemek için gerekenler blok dışında kendini zayıf (__block) bir referans olarak oluşturmak için yukarıdaki örnekte.

Ne yaptığını anlamıyorum 'zayıf (__block)'?

__block typeof(self) tmpSelf = self;

ve

__weak typeof(self) tmpSelf = self;

aynen burada işlemciyi

Belgede bir yer bulduk:

Not: Eğer uygularsanız çöp toplama çevre, hem __weak ve bir __block bir değişken için değiştiriciler, sonra bloğu hayatta emin olmak gerekir.

Yani, tamamen kafam karıştı.

CEVAP
2 AĞUSTOS 2012, PERŞEMBE


__Blok hakkında dokümanlar

__blok değişkenleri değişken sözcük kapsamı ve tüm blok ve blok kopyalar veya değişken sözcük kapsamında ilan yaratılan arasında paylaşılan depolama yaşıyor. Böylece, depolama will survive imha yığın çerçevesi eğer herhangi bir kopya blokları ilan çerçevesinde hayatta ötesinde sonuna çerçevesinde (örneğin, tarafından sıraya alındı bir sonraki yürütme). Verilen sözlü bir kapsam içinde birden fazla blok aynı anda paylaşılan bir değişken kullanabilirsiniz.

__İlgili dokümanlar zayıf

__zayıf başvurulan nesne hayatta tutmaz bir referans belirtir. Zayıf bir referans nesnesi güçlü referansları vardır hiçbir zaman sıfır olarak ayarlanır.

Teknik olarak farklı şeyler. __blok değişken blok kapsamı içine dış kapsamdan kopyalanan durdurmak. __zayıf bir kendini zayıf işaretçi sınırlandırma.

Dava için (neredeyse) aynı şeyi yapacaklar çünkü teknik olarak dedim, dikkat edin. Tek fark, eğer YAY kullanıyorsanız ya da değil. Projenizin YAY kullanır ve iOS4 için ise.3 ve üstü, __zayıf kullanın. Başvuru eğer küresel kapsam başvurusunu serbest bir şekilde ise sıfıra ayarlanır sağlar. Projenizin YAY kullanmaz ya da eski işletim sistemi sürümleri için ise, __blok kullanın.

Burada ince bir fark, bunu anladığınızdan emin olun.

EDİT: bilmece __güvensiz_Başka bir parça unretained. Bu değiştirici __zayıf ama ön 4.3 zamanı aynı ortamlarda neredeyse. ANCAK, sıfıra ayarlanır ve sarkan işaretçiler ile bırakabilirsiniz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • buttheadgsxr1000

    buttheadgsxr

    24 Ocak 2008
  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • Manuel Vizcaino

    Manuel Vizca

    27 Mayıs 2008