面試必看|40道絕版iOS開發(fā)面試題

在這遍搞,小編為各位搜羅了一些經(jīng)典面試題罗侯,一起去看看吧!

圖一

純干貨溪猿、不羅嗦歇父!

看不看由你,

錯過別躺淚

圖二

1.Object-C有多繼承嗎再愈?沒有的話用什么代替榜苫?

cocoa 中所有的類都是NSObject 的子類,多繼承在這里是用protocol 委托代理來實現(xiàn)的

你不用去考慮繁瑣的多繼承 ,虛基類的概念.ood的多態(tài)特性

在 obj-c 中通過委托來實現(xiàn).

2.Object-C有私有方法嗎翎冲?私有變量呢垂睬?

objective-c – 類里面的方法只有兩種, 靜態(tài)方法和實例方法. 這似乎就不是完整的面向?qū)ο罅?按照OO的原則就是一個對象只暴露有用的東西. 如果沒有了私有方法的話, 對于一些小范圍的代碼重用就不那么順手了. 在類里面聲名一個私有方法

@interface Controller : NSObject { NSString *something; }

+ (void)thisIsAStaticMethod;

– (void)thisIsAnInstanceMethod;

@end

@interface Controller (private) -

(void)thisIsAPrivateMethod;

@end

@private可以用來修飾私有變量

在Objective‐C中,所有實例變量默認(rèn)都是私有的,所有實例方法默認(rèn)都是公有的涂圆。

3.線程和進程的區(qū)別祠乃?

進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性赏壹。

進程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進程有獨立的地址空間衔沼,一個進程崩潰后蝌借,在保護模式下不會對其它進程產(chǎn)生影響,而線程只是一個進程中的不同執(zhí)行路徑指蚁。線程有自己的堆棧和局部變量菩佑,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉凝化,所以多進程的程序要比多線程的程序健壯稍坯,但在進程切換時,耗費資源較大搓劫,效率要差一些瞧哟。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作,只能用線程枪向,不能用進程勤揩。

4.堆和棧的區(qū)別?

管理方式:對于棧來講遣疯,是由編譯器自動管理雄可,無需我們手工控制凿傅;對于堆來說,釋放工作由程序員控制数苫,容易產(chǎn)生memory leak聪舒。

申請大小:

棧:在Windows下,棧是向低地址擴展的數(shù)據(jù)結(jié)構(gòu)虐急,是一塊連續(xù)的內(nèi)存的區(qū)域箱残。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的,在WINDOWS下止吁,棧的大小是2M(也有的說是1M被辑,總之是一個編譯時就確定的常數(shù)),如果申請的空間超過棧的剩余空間時敬惦,將提示overflow盼理。因此,能從棧獲得的空間較小俄删。

堆:堆是向高地址擴展的數(shù)據(jù)結(jié)構(gòu)宏怔,是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是用鏈表來存儲的空閑內(nèi)存地址的畴椰,自然是不連續(xù)的臊诊,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計算機系統(tǒng)中有效的虛擬內(nèi)存斜脂。由此可見抓艳,堆獲得的空間比較靈活,也比較大帚戳。

碎片問題:對于堆來講玷或,頻繁的new/delete勢必會造成內(nèi)存空間的不連續(xù),從而造成大量的碎片销斟,使程序效率降低庐椒。對于棧來講,則不會存在這個問題蚂踊,因為棧是先進后出的隊列,他們是如此的一一對應(yīng)笔宿,以至于永遠都不可能有一個內(nèi)存塊從棧中間彈出

分配方式:堆都是動態(tài)分配的犁钟,沒有靜態(tài)分配的堆。棧有2種分配方式:靜態(tài)分配和動態(tài)分配泼橘。靜態(tài)分配是編譯器完成的涝动,比如局部變量的分配。動態(tài)分配由alloca函數(shù)進行分配炬灭,但是棧的動態(tài)分配和堆是不同的醋粟,他的動態(tài)分配是由編譯器進行釋放,無需我們手工實現(xiàn)。

分配效率:棧是機器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu)米愿,計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址厦凤,壓棧出棧都有專門的指令執(zhí)行,這就決定了棧的效率比較高育苟。堆則是C/C++函數(shù)庫提供的较鼓,它的機制是很復(fù)雜的。

5.Object-C的內(nèi)存管理违柏?

當(dāng)你使用new,alloc和copy方法創(chuàng)建一個對象時,該對象的保留計數(shù)器值為1.當(dāng)你不再使用該對象時,你要負責(zé)向該對象發(fā)送一條release或autorelease消息.這樣,該對象將在使用壽命結(jié)束時被銷毀.

當(dāng)你通過任何其他方法獲得一個對象時,則假設(shè)該對象的保留計數(shù)器值為1,而且已經(jīng)被設(shè)置為自動釋放,你不需要執(zhí)行任何操作來確保該對象被清理.如果你打算在一段時間內(nèi)擁有該對象,則需要保留它并確保在操作完成時釋放它.

如果你保留了某個對象,你需要(最終)釋放或自動釋放該對象.必須保持retain方法和release方法的使用次數(shù)相等.

6.為什么很多內(nèi)置的類博烂,如TableViewController的delegate的屬性是assign不是retain?

循環(huán)引用

所有的引用計數(shù)系統(tǒng)漱竖,都存在循環(huán)應(yīng)用的問題禽篱。

例如下面的引用關(guān)系:

· 對象a創(chuàng)建并引用到了對象b.

· 對象b創(chuàng)建并引用到了對象c.

· 對象c創(chuàng)建并引用到了對象b.

這時候b和c的引用計數(shù)分別是2和1。當(dāng)a不再使用b馍惹,調(diào)用release釋放對b的所有權(quán)谆级,因為c還引用了b,所以b的引用計數(shù)為1讼积,b不會被釋放肥照。b不釋放,c的引用計數(shù)就是1勤众,c也不會被釋放舆绎。從此,b和c永遠留在內(nèi)存中们颜。

這種情況吕朵,必須打斷循環(huán)引用,通過其他規(guī)則來維護引用關(guān)系窥突。比如努溃,我們常見的delegate往往是assign方式的屬性而不是retain方式的屬性,賦值不會增加引用計數(shù)阻问,就是為了防止delegation兩端產(chǎn)生不必要的循環(huán)引用梧税。如果一個UITableViewController 對象a通過retain獲取了UITableView對象b的所有權(quán),這個UITableView對象b的delegate又是a称近,

如果這個delegate是retain方式的第队,那基本上就沒有機會釋放這兩個對象了。自己在設(shè)計使用delegate模式時刨秆,也要注意這點凳谦。

7.定義屬性時,什么情況使用copy衡未、assign尸执、retain家凯?

assign用于簡單數(shù)據(jù)類型,如NSInteger,double,bool,

retain和copy用于對象如失,

copy用于當(dāng)a指向一個對象绊诲,b也想指向同樣的對象的時候,如果用assign岖常,a如果釋放驯镊,再調(diào)用b會crash,如果用copy 的方式,a和b各自有自己的內(nèi)存竭鞍,就可以解決這個問題板惑。

retain 會使計數(shù)器加一,也可以解決assign的問題偎快。

另外:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作冯乘。在多線程環(huán)境下,原子操作是必要的晒夹,否則有可能引起錯誤的結(jié)果裆馒。

加了atomic,setter函數(shù)會變成下面這樣:

if (property != newValue) {

[property release];

property = [newValue retain];

}

8.對象是什么時候被release的丐怯?

引用計數(shù)為0時喷好。

autorelease實際上只是把對release的調(diào)用延遲了,對于每一個Autorelease读跷,系統(tǒng)只是把該Object放入了當(dāng)前的Autorelease pool中梗搅,當(dāng)該pool被釋放時,該pool中的所有Object會被調(diào)用Release效览。對于每一個Runloop无切,

系統(tǒng)會隱式創(chuàng)建一個Autorelease pool,這樣所有的release pool會構(gòu)成一個象CallStack一樣的一個棧式結(jié)構(gòu)丐枉,在每一個Runloop結(jié)束時哆键,當(dāng)前棧頂?shù)腁utorelease pool會被銷毀,這樣這個pool里的每個Object(就是autorelease的對象)會被release瘦锹。

9.那什么是一個Runloop呢?

一個UI事件沼本,Timer call抽兆, delegate call,

都會是一個新的Runloop

10.iOS有沒有垃圾回收族淮?

Objective-C 2.0也是有垃圾回收機制的辫红,但是只能在Mac OS X Leopard 10.5 以上的版本使用。

11.tableView的重用機制切油?

查看UITableView頭文件,會找到NSMutableArray* visiableCells名惩,和NSMutableDictnery* reusableTableCells兩個結(jié)構(gòu)澎胡。visiableCells內(nèi)保存當(dāng)前顯示的cells娩鹉,reusableTableCells保存可重用的cells。

TableView顯示之初戚宦,reusableTableCells為空锈嫩,那么tableView dequeueReusableCellWithIdentifier:CellIdentifier返回nil。開始的cell都是通過[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]來創(chuàng)建艳汽,而且cellForRowAtIndexPath只是調(diào)用最大顯示cell數(shù)的次數(shù)对雪。

比如:有100條數(shù)據(jù),iPhone一屏最多顯示10個cell甚牲。程序最開始顯示TableView的情況是:

1.用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]創(chuàng)建10次cell蝶柿,并給cell指定同樣的重用標(biāo)識(當(dāng)然交汤,可以為不同顯示類型的cell指定不同的標(biāo)識)。并且10個cell全部都加入到visiableCells數(shù)組芙扎,reusableTableCells為空戒洼。

2. 向下拖動tableView俏橘,當(dāng)cell1完全移出屏幕,并且cell11(它也是alloc出來的寥掐,原因同上)完全顯示出來的時候召耘。cell11加入到visiableCells,cell1移出visiableCells剖踊,cell1加入到reusableTableCells衫贬。

3. 接著向下拖動tableView,因為reusableTableCells中已經(jīng)有值圃验,所以缝呕,當(dāng)需要顯示新的cell供常,cellForRowAtIndexPath再次被調(diào)用的時候,tableView dequeueReusableCellWithIdentifier:CellIdentifier麻裁,返回cell1源祈。cell1加入到visiableCells,cell1移出reusableTableCells手销;cell2移出visiableCells图张,cell2加入到reusableTableCells祸轮。之后再需要顯示的Cell就可以正常重用了。

12.ViewController 的loadView柄错、viewDidLoad、viewDidUnload分別是什么時候調(diào)用的冕房,在自定義ViewCointroller時在這幾個函數(shù)中應(yīng)該做什么工作趁矾?

由init毫捣、loadView帝际、viewDidLoad蹲诀、viewDidUnload、dealloc的關(guān)系說起

init方法

在init方法中實例化必要的對象(遵從LazyLoad思想)

init方法中初始化ViewController本身

loadView方法

當(dāng)view需要被展示而它卻是nil時则北,viewController會調(diào)用該方法痕慢。不要直接調(diào)用該方法掖举。

如果手工維護views,必須重載重寫該方法

如果使用IB維護views方篮,必須不能重載重寫該方法

loadView和IB構(gòu)建view

你在控制器中實現(xiàn)了loadView方法励负,那么你可能會在應(yīng)用運行的某個時候被內(nèi)存管理控制調(diào)用熄守。

如果設(shè)備內(nèi)存不足的時候, view 控制器會收到didReceiveMemoryWarning的消息攒发。

默認(rèn)的實現(xiàn)是檢查當(dāng)前控制器的view是否在使用晋南。

如果它的view不在當(dāng)前正在使用的view hierarchy里面负间,且你的控制器實現(xiàn)了loadView方法姜凄,那么這個view將被release, loadView方法將被再次調(diào)用來創(chuàng)建一個新的view趾访。

viewDidLoad方法

viewDidLoad 此方法只有當(dāng)view從nib文件初始化的時候才被調(diào)用扼鞋。

重載重寫該方法以進一步定制view

在iPhone OS 3.0及之后的版本中,還應(yīng)該重載重寫viewDidUnload來釋放對view的任何索引

viewDidLoad后調(diào)用數(shù)據(jù)Model

viewDidUnload方法

當(dāng)系統(tǒng)內(nèi)存吃緊的時候會調(diào)用該方法(注:viewController沒有被dealloc)

內(nèi)存吃緊時捐友,在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用內(nèi)存的唯一方式匣砖,但是OS 3.0及以后viewDidUnload方法是更好的方式

在該方法中將所有IBOutlet(無論是property還是實例變量)置為nil(系統(tǒng)release view時已經(jīng)將其release掉了)

在該方法中釋放其他與view有關(guān)的對象昏滴、其他在運行時創(chuàng)建(但非系統(tǒng)必須)的對象影涉、在viewDidLoad中被創(chuàng)建的對象、緩存數(shù)據(jù)等 release對象后匣缘,將對象置為nil(IBOutlet只需要將其置為nil鲜棠,系統(tǒng)release view時已經(jīng)將其release掉了)

一般認(rèn)為viewDidUnload是viewDidLoad的鏡像豁陆,因為當(dāng)view被重新請求時,viewDidLoad還會重新被執(zhí)行

viewDidUnload中被release的對象必須是很容易被重新創(chuàng)建的對象(比如在viewDidLoad或其他方法中創(chuàng)建的對象)表鳍,不要release用戶數(shù)據(jù)或其他很難被重新創(chuàng)建的對象

dealloc方法

viewDidUnload和dealloc方法沒有關(guān)聯(lián)祥诽,dealloc還是繼續(xù)做它該做的事情

13.ViewController的didReceiveMemoryWarning是在什么時候調(diào)用的雄坪?默認(rèn)的操作是什么?

當(dāng)程序接到內(nèi)存警告時View Controller將會收到這個消息:didReceiveMemoryWarning

從iOS3.0開始绳姨,不需要重載這個函數(shù)飘庄,把釋放內(nèi)存的代碼放到viewDidUnload中去。

這個函數(shù)的默認(rèn)實現(xiàn)是:檢查controller是否可以安全地釋放它的view(這里加粗的view指的是controller的view屬性)空郊,比如view本身沒有superview并且可以被很容易地重建(從nib或者loadView函數(shù))切揭。

如果view可以被釋放廓旬,那么這個函數(shù)釋放view并調(diào)用viewDidUnload谐腰。

你可以重載這個函數(shù)來釋放controller中使用的其他內(nèi)存十气。但要記得調(diào)用這個函數(shù)的super實現(xiàn)來允許父類(一般是UIVIewController)釋放view。

如果你的ViewController保存著view的子view的引用叶眉,那么芹枷,在早期的iOS版本中鸳慈,你應(yīng)該在這個函數(shù)中來釋放這些引用。而在iOS3.0或更高版本中绩郎,你應(yīng)該在viewDidUnload中釋放這些引用翁逞。

14.列舉Cocoa中常見的集中多線程的實現(xiàn)熄攘,并談?wù)劧嗑€程安全的幾種解決辦法,一般什么地方會用到多線程浅萧?

NSOperation NSThread@sychonized

怎么理解MVC,在Cocoa中MVC是怎么實現(xiàn)的吩案?

MVC設(shè)計模式考慮三種對象:模型對象徘郭、視圖對象丧肴、和控制器對象芋浮。模型對象代表特別的知識和專業(yè)技能,它們負責(zé)保有應(yīng)用程序的數(shù)據(jù)和定義操作數(shù)據(jù)的邏輯镇草。視圖對象知道如何顯示應(yīng)用程序的模型數(shù)據(jù)瘤旨,而且可能允許用戶對其進行編輯存哲。控制器對象是應(yīng)用程序的視圖對象和模型對象之間的協(xié)調(diào)者羽嫡。

15.ViewCotroller杭棵、Xib氛赐、delegate和notification區(qū)別,分別在什么情況下使用滓侍?

KVC(Key-Value-Coding)KVO(Key-Value-Observing)

理解KVC與KVO(鍵-值-編碼與鍵-值-監(jiān)看)

當(dāng)通過KVC調(diào)用對象時撩笆,比如:[self valueForKey:@"someKey"]時,程序會自動試圖通過幾種不同的方式解析這個調(diào)用氮兵。首先查找對象是否帶有 someKey 這個方法泣栈,如果沒找到弥姻,會繼續(xù)查找對象是否帶有someKey這個實例變量(iVar)庭敦,如果還沒有找到,程序會繼續(xù)試圖調(diào)用 -(id) valueForUndefinedKey:這個方法颠悬。

如果這個方法還是沒有被實現(xiàn)的話定血,程序會拋出一個NSUndefinedKeyException異常錯誤澜沟。

(Key-Value Coding查找方法的時候峡谊,不僅僅會查找someKey這個方法既们,還會查找getsomeKey這個方法,前面加一個get号杏,或者_someKey以及_getsomeKey這幾種形式盾致。同時荣暮,查找實例變量的時候也會不僅僅查找someKey這個變量穗酥,也會查找_someKey這個變量是否存在惠遏。)

設(shè)計valueForUndefinedKey:方法的主要目的是當(dāng)你使用-(id)valueForKey方法從對象中請求值時节吮,對象能夠在錯誤發(fā)生前器一,有最后的機會響應(yīng)這個請求祈秕。

16.id请毛、nil代表什么?

id

id和void *并非完全一樣固棚。在上面的代碼中仙蚜,id是指向struct objc_object的一個指針委粉,這個意思基本上是說贾节,id是一個指向任何一個繼承了Object(或者NSObject)類的對象。需要注意的是id是一個指針知牌,所以你在使用id的時候不需要加星號斤程。比如id foo=nil定義了一個nil指針暖释,這個指針指向NSObject的一個任意子類球匕。而id *foo=nil則定義了一個指針,這個指針指向另一個指針橄杨,被指向的這個指針指向NSObject的一個子類式矫。

nil

nil和C語言的NULL相同,在objc/objc.h中定義聪廉。nil表示一個Objctive-C對象故慈,這個對象的指針指向空(沒有東西就是空)。

17.內(nèi)存管理 Autorelease干签、retain拆撼、copy闸度、

assign的set方法和含義莺禁?

1,你初始化(alloc/init)的對象,你需要釋放(release)它柒傻。例如:

NSMutableArray aArray = [[NSArray alloc] init];

后红符,需要

[aArray release];

2伐债,你retain或copy的峰锁,你需要釋放它。例如:

[aArray retain]

后糜芳,需要

[aArray release];

3峭竣,被傳遞(assign)的對象,你需要斟酌的retain和release扣墩。例如:

obj2 = [[obj1 someMethod] autorelease];

對象2接收對象1的一個自動釋放的值呻惕,或傳遞一個基本數(shù)據(jù)類型(NSInteger蟆融,NSString)時: 你或希望將對象2進行retain守呜,以防止它在被使用之前就被自動釋放掉查乒。但是在retain后玛迄,一定要在適當(dāng)?shù)臅r候進行釋放。

18.關(guān)于索引計數(shù)

(Reference Counting)的問題

retain值 = 索引計數(shù)(Reference Counting)

NSArray對象會retain(retain值加一)任何數(shù)組中的對象虏杰。當(dāng)NSArray被卸載(dealloc)的時候纺阔,所有數(shù)組中的對象會被執(zhí)行一次釋放(retain值減一)笛钝。不僅僅是NSArray愕宋,任何收集類(Collection Classes)都執(zhí)行類似操作中贝。

例如NSDictionary雄妥,甚至UINavigationController依溯。

Alloc/init建立的對象黎炉,索引計數(shù)為1慷嗜。無需將其再次retain庆械。

[NSArray array]和[NSDate date]等”方法”建立一個索引計數(shù)為1的對象菌赖,但是也是一個自動釋放對象琉用。所以是本地臨時對象,那么無所謂了奴紧。如果是打算在全Class中使用的變量(iVar)黍氮,則必須retain它沫浆。

缺省的類方法返回值都被執(zhí)行了”自動釋放”方法滚秩。(*如上中的NSArray)

19.在類中的卸載方法”dealloc”中叔遂,release所有未被平衡的NS對象已艰。(*所有未被autorelease,而retain值為1的)

類別的作用蚕苇?

有時我們需要在一個已經(jīng)定義好的類中增加一些方法哩掺,而不想去重寫該類。比如涩笤,當(dāng)工程已經(jīng)很大嚼吞,代碼量比較多盒件,或者類中已經(jīng)包住很多方法,已經(jīng)有其他代碼調(diào)用了該類創(chuàng)建對象并使用該類的方法時舱禽,可以使用類別對該類擴充新的方法。

注意:類別只能擴充方法誊稚,而不能擴充成員變量翔始。

委托(舉例)

委托代理(degegate),顧名思義里伯,把某個對象要做的事情委托給別的對象去做城瞎。那么別的對象就是這個對象的代理,代替它來打理要做的事疾瓮。反映到程序中脖镀,首先要明確一個對象的委托方是哪個對象,委托所做的內(nèi)容是什么狼电。

委托機制是一種設(shè)計模式蜒灰,在很多語言中都用到的,這只是個通用的思想漫萄,網(wǎng)上會有很多關(guān)于這方面的介紹卷员。

那么在蘋果開發(fā)過程中,用到委托的程序?qū)崿F(xiàn)思想如下腾务,我主要拿如何在視圖之間傳輸信息做個例子毕骡。

譬如:在兩個頁面(UIIview視圖對象)實現(xiàn)傳值,用委托(delegate)可以很好做到岩瘦!

方法:

類A

@interface A:UIView

id transparendValueDelegate;

@property(nomatic, retain) id transparendValueDelegate;

@end

@implemtion A

@synthesize transparendValueDelegate

-(void)Function

{

NSString* value = @”hello”;

//讓代理對象執(zhí)行transparendValue動作

[transparendValueDelegate transparendValue: value];

}

@end

類B

@interface B:UIView

NSString* value;

@end

@implemtion B

-(void)transparendValue:(NSString*)fromValue

{

value = fromValue;

NSLog(@”the value is %@ “,value);

}

@end

//下面的設(shè)置A代理委托對象為B

//在定義A和B類對象處:

A* a = [[A alloc] init];

B* b = [[B alloc] init];

a. transparendValueDelegate = b;//設(shè)置對象a代理為對象b

這樣在視圖A和B之間可以通過委托來傳值未巫!

下面這個例子委托有兩類:

1、一個視圖類對象的代理對象為父視圖启昧,子視圖用代理實現(xiàn)讓父視圖顯示別的子視圖

2叙凡、同一父視圖下的一個子視圖為另一個子視圖的代理對象,讓另一個子視圖改變自身背景色為給定的顏色

===============================================

規(guī)范格式如下:

@protocol TransparendValueDelegate;

@interface A:UIView

id< TransparendValueDelegate > m_dTransparendValueDelegate;

@property(nomatic, retain) id m_dTransparendValueDelegate;

@end

//代理協(xié)議的聲明

@protocol TransparendValueDelegat

{

-(void)transparendValue:(NSString*)fromValue;

}

frame 和 bounds 的 區(qū)別 密末,bound的大小改變frame 改變嗎握爷?

frame: 該view在父view坐標(biāo)系統(tǒng)中的位置和大小。(參照點是严里,父親的坐標(biāo)系統(tǒng))

bounds:該view在本地坐標(biāo)系統(tǒng)中的位置和大小新啼。(參照點是,本地坐標(biāo)系統(tǒng))

20.iOS程序運行流程

1. 系統(tǒng)調(diào)用app的main函數(shù)

2. main函數(shù)調(diào)用UIApplicationMain.

3. UIApplicationMain創(chuàng)建shared application instance, UIApplication默認(rèn)的instance.

4. UIApplicationMain讀取Info.plist找到主nib文件, 加載nib刹碾,把shared application instance 設(shè)為nib的owner.

5. 通過nib文件燥撞,創(chuàng)建app的獨立UIWindows object.

6. 通過nib,實例化了程序的AppDelegate object.

7. app內(nèi)部啟動結(jié)束,application:didFinishLaunchingWith- Options: 被設(shè)定成 wAppDelegate instance.

8. AppDelegate向UIWindow instance發(fā)makeKeyAndVisible消息, app界面展示給用戶. app準(zhǔn)備好接收用戶的操作指令.

師傅領(lǐng)進門物舒,修行看個人

還有20T經(jīng)典面試題

百度一下色洞,你就知道

趕快動手吧!

……

還有超級經(jīng)典面試題冠胯,無答案火诸!

1.內(nèi)存管理的方式有哪些?

手動管理 ARC GC

2.怎樣實現(xiàn)一個 singleton的類.給出思路

3.什么是序列化或者Acrchiving,可以用來做什么,怎樣與copy結(jié)合,原理是什么?.

4.在iphone上有兩件事情要做,請問是在一個線程里按順序做效率高還是兩個線程里做效率高涵叮?為什么惭蹂?

5.runloop是什么?在主線程中的某個函數(shù)里調(diào)用了異步函數(shù)割粮,怎么樣block當(dāng)前線程,且還能響應(yīng)當(dāng)前線程的timer事件盾碗,touch事件等.

6.ios平臺怎么做數(shù)據(jù)的持久化?coredata和sqlite有無必然聯(lián)系?coredata是一個關(guān)系型數(shù)據(jù)庫嗎舀瓢?

7.闡述一個nil對象從interface bulider產(chǎn)生廷雅,到載入程序運行空間,最后被釋放時所經(jīng)歷的生命周期.

8.notification是同步還是異步? kvo是同步還是異步京髓?

9.notification是全進程空間的通知嗎航缀?kvo呢?

10.kvc是什么?kvo是什么?有什么特性堰怨?

11.響應(yīng)者鏈?zhǔn)鞘裁矗?/p>

12.unix上進程怎么通信芥玉?

13.timer的間隔周期準(zhǔn)嗎?為什么备图?怎樣實現(xiàn)一個精準(zhǔn)的timer?

14.UIscrollVew用到了什么設(shè)計模式灿巧?還能再foundation庫中找到類似的嗎?

15.如果要開發(fā)一個類似eclipse的軟件揽涮,支持插件結(jié)構(gòu)抠藕。且開放給第三方開發(fā)。你會怎樣去設(shè)計它蒋困?(大概思路)

16.C和obj-c 如何混用盾似?

17.以下每行代碼執(zhí)行后,person對象的retain count分別是多少?Person *person = [[Person alloc] init]; // count 1?[person retain]; // count 2?[person release]; //count 1?[person release]; //retain count = 1;

18.ViewController 的 didReceiveMemoryWarning 是在什么時候被調(diào)用的雪标?

19.內(nèi)存出現(xiàn)警告時零院。

20.ios9新特性有那些?

Everybody村刨,上面這20T靠自己喲门粪!

如果你也是一名iOS開發(fā)者,可以加入小編的iOS學(xué)習(xí)交流群605315994烹困,一起交流學(xué)習(xí)成長。

我是曉媛乾吻,喜歡記得關(guān)注我哦髓梅!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拟蜻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子枯饿,更是在濱河造成了極大的恐慌酝锅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奢方,死亡現(xiàn)場離奇詭異搔扁,居然都是意外死亡,警方通過查閱死者的電腦和手機蟋字,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門稿蹲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹊奖,你說我怎么就攤上這事苛聘。” “怎么了忠聚?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵设哗,是天一觀的道長。 經(jīng)常有香客問我两蟀,道長网梢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任赂毯,我火速辦了婚禮战虏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欢瞪。我一直安慰自己活烙,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布遣鼓。 她就那樣靜靜地躺著啸盏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骑祟。 梳的紋絲不亂的頭發(fā)上回懦,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音次企,去河邊找鬼怯晕。 笑死,一個胖子當(dāng)著我的面吹牛缸棵,可吹牛的內(nèi)容都是我干的舟茶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吧凉!你這毒婦竟也來了隧出?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤阀捅,失蹤者是張志新(化名)和其女友劉穎胀瞪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饲鄙,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡凄诞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忍级。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帆谍。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颤练,靈堂內(nèi)的尸體忽然破棺而出既忆,到底是詐尸還是另有隱情,我是刑警寧澤嗦玖,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布患雇,位于F島的核電站,受9級特大地震影響宇挫,放射性物質(zhì)發(fā)生泄漏苛吱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一器瘪、第九天 我趴在偏房一處隱蔽的房頂上張望翠储。 院中可真熱鬧,春花似錦橡疼、人聲如沸援所。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽住拭。三九已至,卻和暖如春历帚,著一層夾襖步出監(jiān)牢的瞬間滔岳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工挽牢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谱煤,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓禽拔,卻偏偏與公主長得像刘离,于是被迫代替她去往敵國和親室叉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容