SORU
12 AĞUSTOS 2011, Cuma


Ve döküm Köprülü ARK

ARC ile artık id CGColorRef dökme edebilirim. Köprülü bir döküm yapmam gerektiğini öğrendim. clang docs göre:

BirKöprülü attıC-style cast üç anahtar kelime ile açıklama:

(__bridge T) op T İse hedef türü T. işlenen atmalarını op olmalı işaretçi retainable bir nesnedir olmayan retainable türü işaretçi. Eğer T olmayan retainable işaretçi türü ise, sonra op retainable nesne işaretçisi türü olmalıdır. Aksi takdirde döküm hasta-kurdu. Mülkiyet devri ve ARK ekler hayır yok operasyonlar korur.

(__bridge_retained T) op olmalı işlenen, yayınları retainable işaretçi türü, olması gereken hedef türü için nesne olmayan retainable işaretçi türü. ARK değer, tabi korur yerel değerler normal optimizasyon ve alıcı sorumludur dengeleme için 1.

(__bridge_transfer T) op olmalı işlenen, yayınları olmayan retainable türü, olması gereken hedef türü, işaretçi retainable işaretçi nesne türü. ARC sonunda değeri yayınlayacak tam ifade kapsayan, her zamanki iyileştirmeleri tabi yerel değerler.

Bu ve nesneleri aktarmak için gerekli atmalarını ARC kontrolü; dönüşüm bölümünde gerekçesi bakın retainable işaretçiler nesne.

__Bridge_bir muhafaza kullanarak ya __bridge_transfer tamamen ikna etmek için döküm Dengesiz yaymak için ARC korumak ya da, sırasıyla, zavallı bırakın. form.

Ne tür durumlarda her kullanmalıyım?

Örneğin, CAGradientLayer CGColorRef s dizisi kabul colorsbir özelliği vardır. __brige burada kullanacağım, ama ben tam olarak benim tahminim (ya da değil) belli değil.

CEVAP
31 AĞUSTOS 2011, ÇARŞAMBA


Bu açıklama kafa karıştırıcı olduğunu kabul ediyorum. Ben sadece onları kavradı beri özetlemeye çalışacağım:

  • (__bridge_transfer <NSType>) op veya alternatif olarak CFBridgingRelease(op) bir ARK üzerinden aktarılması sırasında korur sayısı CFTypeRef Bir tüketim için kullanılır. Bu da id someObj = (__bridge <NSType>) op; CFRelease(op); tarafından temsil edilecek

  • (__bridge_retained <CFType>) op veya alternatif olarak CFBridgingRetain(op) 1 muhafaza sayımı verirken NSObject CF-arazi teslim etmek için kullanılır. CFTypeRef CFStringCreateCopy() sonucu işlemek gibi aynı oluşturmak işlemek gerekir. Bu da CFRetain((__bridge CFType)op); CFTypeRef someTypeRef = (__bridge CFType)op; tarafından temsil edilecek

  • __bridge sadece işaretçi-toprak arasında atmalarını ve Objective-C-kara nesne. Eğer dönüşümler üstünde kullanmak için herhangi bir eğim varsa, bunu kullanın.

Belki bu yardımcı olur. Kendimi, düz atmalarını üzerinden CFBridging… makroları biraz tercih ederim.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013