Objektif-c - Apakah hubungan antara pengurusan memori iOS [ARC, MRC, kolam memori]?
PHP中文网
PHP中文网 2017-05-02 09:25:59
0
4
877

1. Terdapat tiga kaedah pengurusan memori iOS: ARC, MRC dan kumpulan memori.
2.MRC: Ikut prinsip siapa yang memohon, siapa yang menambah, siapa yang melepaskan. Penambahan dan pengubahsuaian pada teknologi memori memerlukan pengendalian manual. Bermula dari iOS pada 2012, ia telah digantikan secara beransur-ansur dengan mod ARC (pengiraan memori automatik).
3.ARC menggantikan MRC Semasa fasa penyusunan Apl, Xcode menambah kod pengurusan memori.
4. Kolam Pelepas Memori: Letakkan memori yang perlu dilepaskan ke dalam kolam Apabila kolam dikuras, semua ruang memori dalam kolam akan dikeluarkan secara automatik. Operasi pelepasan kumpulan memori dibahagikan kepada automatik dan manual. Pelepasan automatik dipengaruhi oleh mekanisme runloop.

5. Adakah kumpulan memori adalah teknologi MRC? Terdapat pengiraan memori automatik dalam mod ARC, dan pemprosesan memori manual dalam MRC. Jadi adakah kumpulan memori satu lagi kaedah pemprosesan mengira memori di bawah MRC berbanding kaedah pelepasan?

6. Saya tidak dapat mengetahui hubungan antara ARC, MRC dan kumpulan memori.

7. Semantik ARC ialah dalam pembangunan sebenar, tidak perlu risau tentang isu pengurusan ingatan sama sekali. (Betul ke?)

PHP中文网
PHP中文网

认证0级讲师

membalas semua(4)
PHPzhong

ARC dan MRC sebenarnya adalah kaedah pengurusan memori asal, gunakan: alloc; keluaran: release Dengan cara ini, aplikasi dan pelepasan memori perlu dikira dengan tepat, untuk program yang lebih kompleks , mengira bila objek aplikasi harus dilepaskan agak mengelirukan. Maka kaedah pengiraan rujukan Reference Counting muncul, yang digunakan untuk mengira penggunaan objek untuk menentukan sama ada objek itu perlu dilepaskan.
MRC ialah Mannul Reference Counting, yang memerlukan pengiraan manual penggunaan objek iaitu, setiap kali objek digunakan, kiraan rujukan mesti secara manual retain ditambah satu, dan mesti Kurangkan bilangan rujukan sebanyak satu. Kalau tulis lama-lama macam ni, memang rasa susah sangat nak tulis release dan retain, jadi ada pengiraan rujukan automatik release mudah, iaitu membuat kesimpulan ARC dan retain melalui program di mana release sepatutnya muncul, tulis retain dan release sebaliknya.
dan AutoRelease ialah set idea yang sama sekali berbeza, sedikit seperti Java mekanisme pembersihan sampah dalam GC Ia tidak akan digunakan apabila objek tidak lagi digunakan seperti ARC atau MRC dikeluarkan serta-merta, tetapi tunggu peluang untuk melepaskannya. Hari ini, apabila ARC lebih matang, tidak banyak peluang untuk menggunakannya Namun, dalam beberapa senario istimewa, AutoRelease masih boleh mencapai kesan yang ARC tidak dapat.

伊谢尔伦

Anda telah menerangkannya dengan sangat jelas ARC tidak boleh mengatakan bahawa pengurusan memori tidak perlu sama sekali, tetapi ia sememangnya sangat lengkap. Kolam memori adalah tempat anda menyimpan memori yang anda gunakan. Ini mudah difahami. Saya masih ingat bahawa dalam kes ARC, nampaknya memori yang sebelum ini perlu dikeluarkan secara manual boleh terus dimasukkan ke dalam kumpulan pelepasan, dan sistem akan secara automatik melepaskan memori dalam kumpulan pelepasan. MRC adalah apa yang anda katakan, prinsip pelepasan berdasarkan siapa yang memohon. Bercakap tentang itu, saya masih suka MRC, rasanya saya mempunyai banyak kuasa.

黄舟

Jika kita ingin bercakap tentang sejarah, oc telah menjadi MRC sejak pelancarannya, dan AutoRelease ialah ciri 2.0. Tetapi saya tidak tahu bahawa autorelease juga berkaitan dengan runloop Saya tahu bahawa runloop digunakan dalam fungsi utama.

漂亮男人
  1. MRC Pada hari-hari terawal, pengaturcara menguruskan memori secara manual.

  2. ARC dahulunya merupakan projek "Clang static analyzer", yang digunakan untuk menganalisis kod Objective-C untuk mencari ralat seperti kebocoran memori dan pelepasan pramatang sehingga Apple mempertimbangkan untuk menggunakan The analyzer ini secara automatik memasukkan semua pengekalan dan keluaran, yang akhirnya membawa kepada penciptaan ARC.

  3. Autorelease Pool sepatutnya menjadi sesuatu pada masa yang sama dengan MRC dan tiada kaitan dengan ARC. Senario penggunaan biasa ialah: kaedah perlu mengembalikan objek yang baru dibuat, tetapi anda tidak mahu mengekalkannya, dan anda bimbang tentang keluaran awal, jadi anda menghantar mesej autorelease supaya kumpulan autorelease menjadi pemilik sementaranya dan akan tidak dilepaskan lebih awal Apabila mengeringkan Kiraan sementara ini juga ditolak.

Jadi nama kumpulan keluaran automatik mungkin agak mengelirukan Kumpulan keluaran automatik tidak mengeluarkan apa-apa secara "automatik" ialah apa yang anda suruh keluarkan sebelum ini.

Untuk meringkaskan: MRC ialah tempat pengaturcara menulis mengekalkan dan melepaskan untuk mengurus memori Mekanisme kumpulan pelepasan automatik digunakan untuk menyelesaikan beberapa isu pemilikan objek yang sukar menyelamatkan semua orang daripada kebakaran dan air.


  • Hasil pelaksanaan ARC ialah kod selepas dikekalkan dan dikeluarkan ditambah secara automatik, yang tidak berbeza daripada apa yang anda tulis dalam MRC, tetapi kod tersebut kurang terdedah kepada ralat. Dalam erti kata lain, mekanisme ARC berbeza sama sekali daripada pengumpulan sampah Java ialah mekanisme masa kompilasi, bukan mekanisme masa jalan.

  • Apabila menggunakan ARC, anda masih perlu memberi perhatian kepada isu ingatan, seperti rujukan bulat yang kuat yang mudah berlaku apabila menggunakan blok tidak dapat membantu anda dengan masalah seperti ini diliputi dalam mana-mana buku Objektif-C.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan