SORU
21 Aralık 2011, ÇARŞAMBA


ARC __güvensiz_anlamı unretained?

Doğru anladığımdan emin olmak istiyorum:

  1. 0* *Benim değil nesneler gerek var mı?
  2. Bir nesne __unsafe_unretained @property assign kullanmak gerekir mi? Bu nesne korunmaz, ve sadece ben ata nesne anlamına gelir anlamına mı geliyor?
  3. Ne zaman delege dışında kullanmak isteyeyim?
  4. ARK bir şey kullanın önce.

CEVAP
21 Aralık 2011, ÇARŞAMBA


LLVM Derleyici 3.0 dört yeni mülkiyet elemeleri tanıttı: , *, *6__strong__autoreleasing, ve __weak. İlk üç hatta ARC dışında mevcut the specification olarak başına.

Joshua gösterir gibi, varsayılan olarak tüm işaretçiler ARK altında __strong ima edilmiş. Bu bir nesne işaretçisi atandığında, bu işaretçi anlamına gelir sürece korunur anlamına gelir. Bu birçok şey için iyi, ama benim cevap here tarif olarak korumak döngüleri için olasılığını açar. Örneğin, eğer bir nesne içeren bir nesne olarak bir örnek, değişken, ama bu ikinci nesne olan güçlü bir bağlantı ilk olarak temsilci, iki nesne asla yayımladı.

__unsafe_unretained __weak elemelerinde bulunduğunu, bu nedenle içindir. Bunların en yaygın kullanımı için delegeler, nereden aldın tanımlama özelliği için temsilci ile weak unsafe_unretained öznitelik (assign etkili unsafe_unretained), ve sonra eşleşen işaretleme ile ilgili örnek değişkeni ile __weak __unsafe_unretained. Bu temsilci örnek değişkeni hala ilk nesneyi işaret anlamına gelir, ama bu nesne, böylece döngü korur kırılma ve iki nesne serbest bırakılmasını sağlayan korunabilmesi için neden olmaz.

Delegeler ötesinde, bu kodda formu başka herhangi bir muhafaza döngüleri kırmak için yararlıdır. Yardımsever, Kaçakları cihaz şimdi grafiksel bir şekilde uygulamanızda saptadığı korumak devir gösteren Devir bir görünüm içerir.

__unsafe_unretained __weak hem biraz farklı şekillerde nesneler, ama tutma önlemek. __weak bir nesneye işaretçi çok güvenli bir davranıştır işaret ettiği nesne, kaldırma nil çevirecektir. Adı ayırmanın daha sonra __unsafe_unretained bir nesnenin nerede olduğunu hafızasına işaret devam edecektir, anlaşılacağı gibi. Bu çöküyor ayırmanın nesne erişim nedeniyle yol açabilir.

Neden hiç __unsafe_unretained o zaman kullanırsınız? Ne yazık ki, __weak tek dağıtım hedef olarak iOS 5.0 ve Aslan için desteklenir. Eğer iOS 4.0 ve Snow Leopard için geri hedeflemek istiyorsanız, __unsafe_unretained niteleyici kullanmak, ya da Mike Ash MAZeroingWeakRef gibi bir şey kullanmak zorunda.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • apenney888

    apenney888

    27 EKİM 2010
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • KittiesMama

    KittiesMama

    10 AĞUSTOS 2008

İLGİLİ SORU / CEVAPLAR