1.Objective-C如何對(duì)內(nèi)存管理的,說說你的看法和解決方法?
每個(gè)對(duì)象都有一個(gè)引用計(jì)數(shù)器,每個(gè)新對(duì)象的計(jì)數(shù)器是1,當(dāng)對(duì)象的計(jì)數(shù)器減為0時(shí),就會(huì)被銷毀通過retain可以讓對(duì)象的計(jì)數(shù)器+1、release可以讓對(duì)象的計(jì)數(shù)器-1還可以通過autorelease pool管理內(nèi)存如果用ARC,編譯器會(huì)自動(dòng)生成管理內(nèi)存的代碼
2.內(nèi)存管理的幾條原則時(shí)什么?按照默認(rèn)法則.哪些方法生成的對(duì)象需要手動(dòng)釋放?在和property結(jié)合的時(shí)候怎樣有效的避免內(nèi)存泄露??
只要調(diào)用了alloc、copy、new方法產(chǎn)生了一個(gè)新對(duì)象,都必須在最后調(diào)用一次release或者autorelease?
只要調(diào)用了retain,都必須在最后調(diào)用一次release或者autorelease?
@property如果用了copy或者retian,就需要對(duì)不再使用的屬性做一次release操作?
如果用了ARC,另外討論
3.What is Singleton? (單例是什么)
單例:保證程序運(yùn)行過程中,永遠(yuǎn)只有一個(gè)對(duì)象實(shí)例?
目的是:全局共享一份資源、節(jié)省不必要的內(nèi)存開銷
4。對(duì)象是什么時(shí)候被釋放的??
每個(gè)對(duì)象都有一個(gè)引用計(jì)數(shù)器,每個(gè)新對(duì)象的計(jì)數(shù)器是1,當(dāng)對(duì)象的計(jì)數(shù)器減為0時(shí),就會(huì)被銷毀 ? ??
5.什么情況下會(huì)發(fā)生內(nèi)存泄漏和內(nèi)存溢出??
當(dāng)程序在申請(qǐng)內(nèi)存后,無法釋放已申請(qǐng)的內(nèi)存空間(例如一個(gè)對(duì)象或者變量使用完成后沒有釋放,這個(gè)對(duì)象一直占用著內(nèi)存),一次內(nèi)存泄露危害可以忽略,但內(nèi)存泄露堆積后果很嚴(yán)重,無論多少內(nèi)存,遲早會(huì)被占光。內(nèi)存泄露會(huì)最終會(huì)導(dǎo)致內(nèi)存溢出!?
當(dāng)程序在申請(qǐng)內(nèi)存時(shí),沒有足夠的內(nèi)存空間供其使用,出現(xiàn)out of memory;比如申請(qǐng)了一個(gè)int,但給它存了long才能存下的數(shù),那就是內(nèi)存溢出。