Con ARC, ya no puedo convertir CGColorRef
en id
. Aprendí que necesito hacer un reparto en puente. Según clang docs:ARC y molde en puente
Un puenteado fundido es un estilo de C elenco anotado con una de las tres palabras clave:
(__bridge T) op
arroja el operando al tipo de destinoT
. SiT
es un tipo de puntero de objeto retenible, entoncesop
debe tener un tipo de puntero no retenible . SiT
es un tipo de puntero no retenible, , entonces op debe tener un tipo de puntero de objeto retenible. De lo contrario, el modelo está mal formado. No hay transferencia de propiedad, y las inserciones ARC no conservan las operaciones.
(__bridge_retained T) op
arroja el operando, el cual debe tener retainable tipo puntero de objeto, para el tipo de destino, que debe ser un tipo de puntero no puede retener. ARC retiene el valor, sujeto a las optimizaciones habituales en valores locales, y el destinatario es responsable para equilibrar ese +1.
(__bridge_transfer T) op
arroja el operando, el cual debe tener no puede retener tipo de puntero, al tipo de destino, que debe ser un tipo de puntero puede retener objeto . ARC lanzará el valor al final de la expresión completa adjunta, sujeto a las optimizaciones habituales en valores locales.Estos moldes son necesarios para transferir objetos dentro y fuera del control ARC; consulte la explicación en la sección sobre conversión de punteros de objetos retenibles.
Usando un molde
__bridge_retained
o__bridge_transfer
puramente para convencer ARC para emitir conservar un desequilibrado o liberación, respectivamente, es pobre forma.
¿En qué tipo de situaciones usaría cada una?
Por ejemplo, CAGradientLayer
tiene una propiedad colors
que acepta una matriz de CGColorRef
s. Supongo que debería usar __brige
aquí, pero exactamente por qué debería (o no debería) no está claro.
has visto WWDC 2011 323 sesión todavía? Eso explica ARC mucho mejor de lo que podría aquí. Cubre todos los detalles de principio a fin. Es una sesión obligatoria para todos los desarrolladores de Mac/iOS. – rbrown
Gracias, lo echaré un vistazo. – Morrowless
Esto también podría ser de ayuda: http://stackoverflow.com/questions/14352494/bridged-cast-bridge-transfer-vs-bridge-with-synthesized-setter/28495303#28495303 –