À l'ARC, je ne peux plus lancer de CGColorRef
de id
. J'ai appris que j'ai besoin de faire une passerelle en fonte. Selon clang docs:
Un ponté cast est un style C cast annoté avec l'un des trois mots-clés:
(__bridge T) op
convertit l'opérande de destination type de T. Si T est un retainable objet de type pointeur, puis l'op doit avoir un non retainable type de pointeur. Si T est un non-retainable de type pointeur, ensuite, l'op doit avoir un retainable objet de type pointeur. Sinon le casting est mal formé. Il n'y a pas de transfert de propriété, et de l'ARC insère pas conserver opérations.
(__bridge_retained T)
op convertit l'opérande, qui doit avoir retainable objet de type pointeur, pour le type de destination, qui doit être un non-retainable type de pointeur. ARC conserve la valeur, sous réserve de l' d'habitude les optimisations sur les valeurs locales, et que le destinataire est responsable pour l'équilibrage de +1.
(__bridge_transfer T)
op convertit l'opérande, qui doit avoir non retainable de type pointeur, pour le type de destination, qui doit être une retainable objet de type pointeur. L'ARC va dégager de la valeur à la fin de la enfermant plein d'expression, sous réserve de l'habituel optimisations sur les valeurs locales.Ces distributions sont nécessaires afin de transférer des objets dans et hors de Le contrôle de l'ARC; voir la justification dans la section sur la conversion de retainable pointeurs d'objet.
À l'aide d'un __pont_conservés ou __pont_transfert cast purement pour convaincre ARC d'émettre un déséquilibre de la conserver ou de la libération, respectivement, est pauvre forme.
Dans ce genre de situations devrais-je utiliser?
Par exemple, CAGradientLayer
a colors
de la propriété qui accepte un tableau d' CGColorRef
s. Ma conjecture est que je devrais utiliser __brige
ici, mais exactement pourquoi je devrait (ou ne devrait pas) n'est pas claire.