Dengan ARC, saya tidak bisa lagi dilemparkan CGColorRefke id. Saya belajar bahwa saya perlu melakukan pemeran penghubung. Menurut dentang dokumen :
Pemain yang dijembatani adalah pemain gaya-C yang diberi anotasi dengan salah satu dari tiga kata kunci:
(__bridge T) opmelemparkan operan ke tipe tujuanT. JikaTadalah tipe pointer objek yang dapat dipertahankan, makaopharus memiliki tipe pointer yang tidak dapat dipertahankan. JikaTadalah tipe pointer yang tidak dapat dipertahankan, maka op harus memiliki tipe pointer objek yang dapat dipertahankan. Kalau gips tidak terbentuk dengan baik. Tidak ada transfer kepemilikan, dan ARC memasukkan tidak ada operasi penahanan.
(__bridge_retained T) opmelemparkan operan, yang harus memiliki jenis penunjuk objek yang dapat dipertahankan, ke jenis tujuan, yang harus merupakan jenis penunjuk yang tidak dapat dipertahankan. ARC mempertahankan nilainya, tunduk pada optimasi yang biasa dilakukan pada nilai-nilai lokal, dan penerima bertanggung jawab untuk menyeimbangkan +1 tersebut.
(__bridge_transfer T) opmelemparkan operan, yang harus memiliki jenis penunjuk yang tidak dapat dipertahankan, ke jenis tujuan, yang harus merupakan jenis penunjuk objek yang dapat dipertahankan. ARC akan merilis nilai pada akhir ekspresi penuh terlampir, tunduk pada optimasi biasa pada nilai-nilai lokal.Gips ini diperlukan untuk mentransfer objek masuk dan keluar dari kontrol ARC; lihat alasan di bagian tentang konversi pointer objek yang dapat dipertahankan.
Menggunakan
__bridge_retainedatau__bridge_transfermelemparkan murni untuk meyakinkan ARC untuk memancarkan masing-masing mempertahankan atau melepaskan tidak seimbang, adalah bentuk yang buruk.
Dalam situasi apa saya akan menggunakan masing-masing?
Misalnya, CAGradientLayermemiliki colorsproperti yang menerima array CGColorRefs. Dugaan saya adalah bahwa saya harus menggunakan di __brigesini, tetapi mengapa saya harus (atau tidak seharusnya) tidak jelas.