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

  • Atlantic Records

    Atlantic Rec

    15 Aralık 2006
  • hotstrikegently

    hotstrikegen

    26 AĞUSTOS 2011
  • KIT KAT

    KIT KAT

    3 EKİM 2005