ARC ile, ben artık yayın yapabilirsiniz CGColorRef
için id
. Köprülü bir kadro yapmam gerektiğini öğrendim. Clang belgelerine göre :
Bir köprülü dökme C tarzı dökme üç anahtar kelimelerden biriyle açıklamalı edilir:
(__bridge T) op
işleneni hedef türüne çevirirT
. EğerT
bir retainable nesne işaretçisi türüdür, daha sonraop
, bir sigara retainable işaretçi türü olmalıdır. EğerT
olmayan bir retainable işaretçi türüdür, daha sonra op retainable nesne işaretçisi türü olmalıdır. Aksi takdirde alçı kötü şekillendirilir. Mülkiyet devri yoktur ve ARC tutma işlemleri eklemez.
(__bridge_retained T) op
saklanabilir nesne işaretçisi türüne sahip olması gereken işleneni, saklanamayan işaretçi türü olması gereken hedef türüne çevirir. ARC, yerel değerler üzerindeki olağan optimizasyonlara tabi olarak değeri korur ve alıcı + 1'in dengelenmesinden sorumludur.
(__bridge_transfer T) op
saklanamayan işaretçi türüne sahip olması gereken işleneni, saklanabilir nesne işaretçi türü olması gereken hedef türüne çevirir. ARC, yerel değerlerde olağan optimizasyonlara tabi olarak, çevreleyen tam ifadenin sonundaki değeri yayınlayacaktır.Bu kalıplar, ARC kontrolüne giren ve çıkan nesneleri aktarmak için gereklidir; korunabilir nesne işaretleyicilerinin dönüştürülmesine ilişkin bölümdeki gerekçeye bakın.
ARC'yi sırasıyla dengesiz bir alıkoyma veya serbest bırakmaya ikna etmek için a
__bridge_retained
veya__bridge_transfer
cast kullanılması zayıf formdur.
Her birini ne tür durumlarda kullanardım?
Örneğin, CAGradientLayer
bir yer alır colors
bir dizi kabul özellik CGColorRef
s. Tahminimce __brige
burada kullanmalıyım , ama tam olarak neden kullanmam (ya da etmemem) net değil.