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?)
ARC
danMRC
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 rujukanReference Counting
muncul, yang digunakan untuk mengira penggunaan objek untuk menentukan sama ada objek itu perlu dilepaskan.MRC
ialahMannul Reference Counting
, yang memerlukan pengiraan manual penggunaan objek iaitu, setiap kali objek digunakan, kiraan rujukan mesti secara manualretain
ditambah satu, dan mesti Kurangkan bilangan rujukan sebanyak satu. Kalau tulis lama-lama macam ni, memang rasa susah sangat nak tulisrelease
danretain
, jadi ada pengiraan rujukan automatikrelease
mudah, iaitu membuat kesimpulanARC
danretain
melalui program di manarelease
sepatutnya muncul, tulisretain
danrelease
sebaliknya.dan
AutoRelease
ialah set idea yang sama sekali berbeza, sedikit sepertiJava
mekanisme pembersihan sampah dalamGC
Ia tidak akan digunakan apabila objek tidak lagi digunakan sepertiARC
atauMRC
dikeluarkan serta-merta, tetapi tunggu peluang untuk melepaskannya. Hari ini, apabilaARC
lebih matang, tidak banyak peluang untuk menggunakannya Namun, dalam beberapa senario istimewa,AutoRelease
masih boleh mencapai kesan yangARC
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.
MRC Pada hari-hari terawal, pengaturcara menguruskan memori secara manual.
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.
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.