Rumah > Soal Jawab > teks badan
core foundation与objective-c之间有什么关系和区别?
PHPz2017-04-21 11:18:12
Rangka kerja Asas Teras (CoreFoundation.framework) ialah satu set antara muka bahasa C yang menyediakan pengurusan data asas dan fungsi perkhidmatan untuk aplikasi iOS. Berikut menyenaraikan data yang disokong oleh rangka kerja untuk pengurusan dan perkhidmatan yang boleh disediakan:
Jenis data kumpulan (tatasusunan, koleksi, dll.)
Pakej
Pengurusan Rentetan
Pengurusan tarikh dan masa
Pengurusan blok data asal
Pengurusan Keutamaan
URL dan operasi aliran data
Benang dan RunLoop
Komunikasi port dan soket
Rangka kerja Asas Teras dan rangka kerja Asas berkait rapat, ia menyediakan antara muka untuk fungsi yang sama, tetapi rangka kerja Asas menyediakan antara muka Objektif-C. Jika anda mencampurkan objek Yayasan dengan jenis Asas Teras, anda boleh memanfaatkan "jambatan bebas tol" antara kedua-dua rangka kerja. Apa yang dipanggil penyambungan bebas tol bermakna anda boleh menggunakan jenis tertentu dalam rangka kerja Asas Teras dan Asas pada masa yang sama dalam kaedah atau fungsi rangka kerja tertentu. Banyak jenis data menyokong ciri ini, termasuk jenis data kumpulan dan rentetan. Setiap kelas dan jenis perihalan rangka kerja akan menerangkan sama ada sesuatu objek itu bebas tol berjembatan dan objek apa yang harus dirapatkan.
Penukaran antara penuding Objektif-C dan penuding CoreFoundation
ARC hanya mengurus penunjuk Objektif-C (kekalkan, keluarkan, autorelease) dan tidak mengurus petunjuk CF CoreFoundation diurus dan diurus secara manual oleh CFRetain dan CFRelease Ambil perhatian bahawa tiada autorelease dalam CF.
Apabila menukar penunjuk CocoaFoundation dan penuding CoreFoundation, anda perlu mempertimbangkan pemilikan objek runcing. ARC menyediakan 3 pengubah suai untuk pengurusan.
1. __bridge, tidak melakukan apa-apa, hanya menukar agama. Dalam kes ini:
i). Menukar daripada Koko kepada Teras memerlukan CFRetain secara manual.
ii). Menukar daripada Teras kepada Koko memerlukan CFRelease manual. Jika tidak, selepas penunjuk Koko dilepaskan, kiraan rujukan objek masih 1 dan tidak akan dimusnahkan.
2. __bridge_retained, secara automatik memanggil CFRetain selepas penukaran, yang membantu menyelesaikan situasi i di atas secara automatik.
3. __bridge_transfer, secara automatik memanggil CFRelease selepas penukaran, yang membantu menyelesaikan situasi di atas secara automatik.
Memandangkan ARC tidak dapat mengurus kitaran hayat Objek Asas Teras, kita perlu menggunakan tiga kata kunci penukaran __bridge, __bridge_retained dan __bridge_transfer antara Teras Teras dan ARC.
Menurut dokumentasi rasmi Apple (https://developer.apple.com/library/i...):
__bridge hanya melakukan penukaran jenis, tetapi tidak mengubah suai hak pengurusan objek (memori);
__bridge_retained (CFBridgingRetain juga boleh digunakan) menukar objek Objective-C kepada objek Asas Teras, dan pada masa yang sama menyerahkan pengurusan objek (memori) kepada kami Selepas itu, kami perlu menggunakan CFRelease atau kaedah yang berkaitan lepaskan objek
__bridge_transfer (CFBridgingRelease juga boleh digunakan) menukarkan objek Asas Teras kepada objek Objektif-C, sambil menyerahkan pengurusan objek (memori) kepada ARC.