__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
blokself
, güçlü bir referans eğer öyleyse formlarself
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
__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.
Web referans ve hizmet başvuru arasınd...
Zayıf bir referans ve sahipsiz bir baş...
Bir URI, URL ve URN arasındaki fark ne...
Aramak ve uygulamak arasındaki fark ne...
@Staticmethod ve @Python classmethod a...