類目的優(yōu)缺點(diǎn):優(yōu)點(diǎn):不需要通過增加子類而增加現(xiàn)有類的方法模软,而且類中的方法與原始類方法基本沒有區(qū)別雁仲。缺點(diǎn):無法向類目添加實(shí)例變量,覆蓋原始類方法后咆畏,原始的類方法沒辦法調(diào)用南捂。
iOS是否支持垃圾回收機(jī)制:iOS開發(fā)只支持手動(dòng)內(nèi)存管理(MRC)和自動(dòng)內(nèi)存管理(ARC),Mac開發(fā)支持GC垃圾回收機(jī)制旧找,10.8之后棄用了GC溺健,推薦使用ARC。
內(nèi)存中堆區(qū)和棧區(qū)的區(qū)別:棧區(qū)由編譯器自動(dòng)分配釋放钮蛛,存放方法的參數(shù)值鞭缭,局部變量的值等。堆區(qū)一般由程序員分配與釋放愿卒,若程序員不釋放缚去,則內(nèi)存溢出。
定義屬性的時(shí)候琼开,什么時(shí)候使用assign、retain枕荞、copy柜候、nonatomic?
(1)assign搞动,普通賦值,一般使用于基本的數(shù)據(jù)類型渣刷,常見委托設(shè)計(jì)模式鹦肿,防止循環(huán)引用。
(2)retain辅柴,保留計(jì)數(shù)箩溃,獲取對(duì)象的所有權(quán),引用計(jì)數(shù)在原先的基礎(chǔ)之上+1.
(3)copy碌嘀,用來復(fù)制對(duì)象涣旨,一般字符串使用copy,F(xiàn)oundation中的不可變對(duì)象使用copy效果相當(dāng)于retain股冗,只是引用計(jì)數(shù)+1.
(4)nonatomic霹陡,非原子性操作,不加同步止状,多線程并發(fā)訪問會(huì)提高性能烹棉。
ARC(自動(dòng)內(nèi)存管理)會(huì)造成內(nèi)存泄漏嗎?
ARC中如果內(nèi)存管理不當(dāng)?shù)脑捛影蹋諛訒?huì)造成內(nèi)存泄漏浆洗,比如:ARC中也會(huì)循環(huán)引用導(dǎo)致內(nèi)存管理,OC對(duì)象與CoreFoundation類之間橋接時(shí)集峦,管理不當(dāng)?shù)脑捯矔?huì)產(chǎn)生內(nèi)存泄漏伏社。
當(dāng)釋放對(duì)象的時(shí)候,為什么需要調(diào)用[super dealloc]方法少梁?
這是因?yàn)樽宇惱^承于父類洛口,那么子類中的一些實(shí)例變量也是繼承于父類的,因此我們需要調(diào)用父類的方法將父類所擁有的實(shí)例進(jìn)行釋放掉凯沪。
自動(dòng)釋放池是什么第焰?如何工作?
自動(dòng)釋放池是NSAutorelease類的一個(gè)實(shí)例妨马,當(dāng)向一個(gè)對(duì)象發(fā)送autorelease時(shí)挺举,該對(duì)象會(huì)自動(dòng)進(jìn)入自動(dòng)釋放池中,等到自動(dòng)釋放池銷毀的時(shí)候烘跺,會(huì)將池中所有的對(duì)象發(fā)送一條release消息湘纵,釋放掉對(duì)象。
為什么代理(delegate)屬性都是assign而不是retain滤淳?
這是為了防止循環(huán)引用梧喷,以至于對(duì)象無法得到正確的釋放。
iOS開發(fā)中的數(shù)據(jù)持久性有哪幾種?
1.plist文件的寫入 2.對(duì)象的歸檔 3.NSuserdefaults. 4.SQLite數(shù)據(jù)庫
常見的設(shè)計(jì)模式:MVC铺敌,單例汇歹,工廠,KVO偿凭,策略产弹。
內(nèi)存管理中,在dealloc方法中用release方法好還是self.xxx=nil好弯囊?
使用self.xxx=nil更好痰哨,因?yàn)橄日{(diào)用release方法,而且還將變量設(shè)置為nil,這樣就更安全的釋放對(duì)象匾嘱,防止野指針的調(diào)用斤斧。