objective-c - iOS内存管理【ARC、MRC、内存池】三者的关系?
PHP中文网
PHP中文网 2017-05-02 09:25:59
0
4
860

1.iOS内存管理有三种方法:ARC、MRC、内存池。
2.MRC:遵循谁申请、谁添加、谁释放的原则。需要手动处理内存技术的增加和修改。从12年iOS开始开始,逐步被ARC(自动内存计数)模式取代。
3.ARC就是取代了MRC,在App编译阶段,由Xcode添加了内存管理的代码。
4.内存释放池Release Pool:把需要释放的内存统一放在一个池子中,当池子被抽干后(drain),池子中所有的内存空间也被自动释放掉。 内存池的释放操作分为自动和手动。自动释放受runloop机制影响。

5.内存池是属于MRC的技术吗?ARC模式下有自动内存计数了,MRC下有手动内存处理了。那么内存池是MRC下的相对于release 方法的另一种内存计数处理方法吗?

6.我是搞不清ARC、MRC、内存池 三者的关系。

7.ARC的语义就是在实际开发中,根本不用操心内存管理问题。(是吗?)

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