71.GCD內(nèi)部怎么實(shí)現(xiàn)的?
①.iOS和 OSX 的核心是 XNU 內(nèi)核, GCD是基于 XNU 內(nèi)核實(shí)現(xiàn)的(是由蘋果電腦發(fā)展起來的操作系統(tǒng)內(nèi)核).②.GCD 的 API 全部在 libdispatch 庫中.③.GCD 底層實(shí)現(xiàn)主要有 Dispatch Queue(管理 block)和 Dispatch Source(處理事件).?
72.怎么保證多人開發(fā)進(jìn)行內(nèi)存泄露檢查。使用Analuze進(jìn)行代碼的靜態(tài)分析,為避免麻煩试疙,多人開發(fā)盡量使用ARC.
73跪腹、非自動內(nèi)存管理情況下怎么做單例模式。創(chuàng)建一個單例對象的靜態(tài)實(shí)例,并初始化為nil。創(chuàng)建一個類的類工廠方法,當(dāng)且僅當(dāng)這個類的實(shí)例為nil時生成一個類的實(shí)例卿吐。實(shí)現(xiàn)NScopying協(xié)議,覆蓋allocWithZone:方法锋华,確保用戶在直接分配對象時嗡官,不會產(chǎn)生另一個對象。覆蓋release毯焕、autorelease衍腥、retain、retainCount方法纳猫,確保單例的狀態(tài)婆咸。
?74、對于類方法(靜態(tài)方法)默認(rèn)是autorelease的芜辕,所有類方法都會這樣嗎尚骄?①、系統(tǒng)自帶的絕大數(shù)類方法返回的對象侵续,都是經(jīng)過autorelease.?
75倔丈、block在ARC中和MRC中的方法有何區(qū)別?需要注意什么状蜗?①.對于沒有引用外部變量的Block需五,無論在ARC還是MRC下,類型都是_NSGlobalBlock_,這種類型的block可以理解為一種全局的block,不需要考慮作用域的問題轧坎。同時宏邮,對它進(jìn)行Copy和Retain操作也是無效的。②.避免循環(huán)引用。根據(jù)isa指針蜜氨,block一共有3種類型的block_NSConcreteGlobalBlock 全局靜態(tài)_NSConcreteStackBlock 保存在棧中械筛,出函數(shù)作用域就銷毀_NSConcreteMallocBlock 保存在堆中,retainCount == 0銷毀?
76.什么情況下會發(fā)生內(nèi)存泄露和內(nèi)存溢出飒炎?當(dāng)程序在申請內(nèi)存后变姨,無法釋放已經(jīng)申請的內(nèi)存空間(例如一個對象或者變量在用完后沒有釋放,這個對象就一直占用著內(nèi)存)厌丑,一次內(nèi)存泄露可以忽略,但如果泄露過多的話渔呵,就會造成內(nèi)存溢出怒竿。當(dāng)程序在申請內(nèi)存時,但存入了更大的數(shù)據(jù)扩氢,出現(xiàn)內(nèi)存溢出耕驰。?
77.[NSArray arrayWithobject]這個方法添加對象后,需要對這個數(shù)組進(jìn)行釋放操作嗎录豺?
不需要朦肘,這個對象會被放到自動釋放池中。
78.自動釋放池如何實(shí)現(xiàn)双饥?
自動釋放池以棧的形式實(shí)現(xiàn)媒抠,當(dāng)你創(chuàng)建一個新的自動釋放池時,它將被添加到棧頂咏花,當(dāng)一個對象收到發(fā)送autorelease消息時趴生,它將添加到當(dāng)前線程的處于棧頂?shù)淖詣俞尫懦刂校?dāng)自動釋放池被回收時昏翰,它們從棧中被刪除并且會給池子里所有對象都做一次release操作苍匆。
79.KVO內(nèi)部實(shí)現(xiàn)原理?
①.KVO是基于runtime機(jī)制實(shí)現(xiàn)的棚菊。
②.當(dāng)某個類的對象第一次被觀察時浸踩,系統(tǒng)就會在運(yùn)行期動態(tài)的創(chuàng)建該類的一個派生類,在這個派生類中重寫基類中任何被觀察屬性的setter方法统求。
派生類在被重寫setter方法中實(shí)現(xiàn)了真正的通知機(jī)制检碗。(Person->NSKVONotification Person)
80.能否把比較耗時的操作放在NSNotificationCenter中。
如果在異步線程發(fā)出的通知球订,那么就可以把耗時操作放到NSNotificationCenter中
如果在主線程發(fā)的通知后裸,那么就不可以把耗時操作放到NSNotificationCenter中。