1.Objective-C如何對(duì)內(nèi)存管理的,說(shuō)說(shuō)你的看法和解決方法?
每個(gè)對(duì)象都有一個(gè)引用計(jì)數(shù)器,每個(gè)新對(duì)象的計(jì)數(shù)器是1怔匣,當(dāng)對(duì)象的計(jì)數(shù)器減為0時(shí),就會(huì)被銷毀通過(guò)retain可以讓對(duì)象的計(jì)數(shù)器+1、release可以讓對(duì)象的計(jì)數(shù)器-1還可以通過(guò)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)行過(guò)程中汇在,永遠(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)存后,無(wú)法釋放已申請(qǐng)的內(nèi)存空間(例如一個(gè)對(duì)象或者變量使用完成后沒(méi)有釋放,這個(gè)對(duì)象一直占用著內(nèi)存)咆瘟,一次內(nèi)存泄露危害可以忽略,但內(nèi)存泄露堆積后果很嚴(yán)重袒餐,無(wú)論多少內(nèi)存,遲早會(huì)被占光。內(nèi)存泄露會(huì)最終會(huì)導(dǎo)致內(nèi)存溢出灸眼!?
當(dāng)程序在申請(qǐng)內(nèi)存時(shí),沒(méi)有足夠的內(nèi)存空間供其使用焰宣,出現(xiàn)out of memory;比如申請(qǐng)了一個(gè)int,但給它存了long才能存下的數(shù)盈罐,那就是內(nèi)存溢出闪唆。