cari

Rumah  >  Soal Jawab  >  teks badan

cocoa-touch - core foundation与objective-c区别?

core foundation与objective-c之间有什么关系和区别?

怪我咯怪我咯2769 hari yang lalu546

membalas semua(1)saya akan balas

  • PHPz

    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.

    balas
    0
  • Batalbalas