21. oc中可修改和不可以修改類型俯抖。
答:可修改不可修改的集合類。這個我個人簡單理解就是可動態(tài)添加修改和不可動態(tài)添加修改一樣呕诉。
比如NSArray和NSMutableArray福铅。前者在初始化后的內存控件就是固定不可變的弟胀,后者可以添加等揖盘,可以動態(tài)申請新的內存空間眉厨。
22. 我們說的oc是動態(tài)運行時語言是什么意思?
答:多態(tài)。 主要是將數據類型的確定由編譯時兽狭,推遲到了運行時憾股。
這個問題其實淺涉及到兩個概念鹿蜀,運行時和多態(tài)。
簡單來說荔燎,運行時機制使我們直到運行時才去決定一個對象的類別耻姥,以及調用該類別對象指定方法。
多態(tài):不同對象以自己的方式響應相同的消息的能力叫做多態(tài)有咨。意思就是假設生物類(life)都用有一個相同的方法-eat;
那人類屬于生物,豬也屬于生物蒸健,都繼承了life后座享,實現各自的eat,但是調用是我們只需調用各自的eat方法似忧。
也就是不同的對象以自己的方式響應了相同的消息(響應了eat這個選擇器)渣叛。
因此也可以說,運行時機制是多態(tài)的基礎?~~~
23. 通知和協議的不同之處?
答:協議有控制鏈(has-a)的關系盯捌,通知沒有淳衙。
首先我一開始也不太明白,什么叫控制鏈(專業(yè)術語了~)饺著。但是簡單分析下通知和代理的行為模式箫攀,我們大致可以有自己的理解
簡單來說,通知的話幼衰,它可以一對多靴跛,一條消息可以發(fā)送給多個消息接受者。
代理按我們的理解渡嚣,到不是直接說不能一對多梢睛,比如我們知道的明星經濟代理人,很多時候一個經濟人負責好幾個明星的事務识椰。
只是對于不同明星間绝葡,代理的事物對象都是不一樣的,一一對應腹鹉,不可能說明天要處理A明星要一個發(fā)布會藏畅,代理人發(fā)出處理發(fā)布會的消息后,別稱B的
發(fā)布會了种蘸。但是通知就不一樣墓赴,他只關心發(fā)出通知,而不關心多少接收到感興趣要處理航瞭。
因此控制鏈(has-a從英語單詞大致可以看出诫硕,單一擁有和可控制的對應關系。
24. 什么是推送消息?
答:推送通知更是一種技術刊侯。
簡單點就是客戶端獲取資源的一種手段章办。
普通情況下,都是客戶端主動的pull。
推送則是服務器端主動push藕届。 測試push的實現可以查看該博文挪蹭。
25. 關于多態(tài)性
答:多態(tài),子類指針可以賦值給父類休偶。
這個題目其實可以出到一切面向對象語言中梁厉,
因此關于多態(tài),繼承和封裝基本最好都有個自我意識的理解踏兜,也并非一定要把書上資料上寫的能背出來
26. 對于單例的理解
答:在objective-c中要實現一個單例類词顾,至少需要做以下四個步驟:
1).為單例對象實現一個靜態(tài)實例,并初始化碱妆,然后設置成nil肉盹,
2).實現一個實例構造方法檢查上面聲明的靜態(tài)實例是否為nil,如果是則新建并返回一個本類的實例疹尾,
3).重寫allocWithZone方法上忍,用來保證其他人直接使用alloc和init試圖獲得一個新實力的時候不產生一個新實例,
4).適當實現allocWitheZone纳本,copyWithZone窍蓝,release和autorelease。
27. 說說響應鏈
答: 事件響應鏈饮醇。包括點擊事件它抱,畫面刷新事件等。在視圖棧內從上至下朴艰,或者從下之上傳播。
可以說點事件的分發(fā)祠墅,傳遞以及處理侮穿。具體可以去看下touch事件這塊。因為問的太抽象化了
嚴重懷疑題目出到越后面就越籠統毁嗦。
可以從責任鏈模式亲茅,來講通過事件響應鏈處理,其擁有的擴展性
28. frame和bounds有什么不同?
答:frame指的是:該view在父view坐標系統中的位置和大小狗准。(參照點是父親的坐標系統)
bounds指的是:該view在本身坐標系統中 的位置和大小克锣。(參照點是本身坐標系統)
29. 方法和選擇器有何不同?
答:selector是一個方法的名字,method是一個組合體腔长,包含了名字和實現.
詳情可以看apple文檔袭祟。
30. OC的垃圾回收機制?
答: OC2.0有Garbage collection,但是iOS平臺不提供捞附。
一般我們了解的objective-c對于內存管理都是手動操作的巾乳,但是也有自動釋放池您没。
但是差了大部分資料,貌似不要和arc機制搞混就好了胆绊。
31. NSOperation queue?
答:存放NSOperation的集合類氨鹏。
操作和操作隊列,基本可以看成java中的線程和線程池的概念压状。用于處理ios多線程開發(fā)的問題仆抵。
網上部分資料提到一點是,雖然是queue何缓,但是卻并不是帶有隊列的概念肢础,放入的操作并非是按照嚴格的先進現出。
這邊又有個疑點是碌廓,對于隊列來說斗这,先進先出的概念是Afunc添加進隊列璧微,Bfunc緊跟著也進入隊列睛低,Afunc先執(zhí)行這個是必然的袒啼,
但是Bfunc是等Afunc完全操作完以后窍帝,B才開始啟動并且執(zhí)行靡砌,因此隊列的概念離亂上有點違背了多線程處理這個概念牙言。
但是轉念一想其實可以參考銀行的取票和叫號系統梳星。
因此對于A比B先排隊取票但是B率先執(zhí)行完操作跟匆,我們亦然可以感性認為這還是一個隊列异袄。
但是后來看到一票關于這操作隊列話題的文章,其中有一句提到
“因為兩個操作提交的時間間隔很近玛臂,線程池中的線程烤蜕,誰先啟動是不定的〖T”
瞬間覺得這個queue名字有點忽悠人了讽营,還不如pool~
綜合一點,我們知道他可以比較大的用處在于可以幫組多線程編程就好了泡徙。
32. 什么是延遲加載?
答:懶漢模式橱鹏,只在用到的時候才去初始化。
也可以理解成延時加載堪藐。
我覺得最好也最簡單的一個列子就是tableView中圖片的加載顯示了莉兰。
一個延時載,避免內存過高礁竞,一個異步加載糖荒,避免線程堵塞。
33. 是否在一個視圖控制器中嵌入兩個tableview控制器?
答:一個視圖控制只提供了一個View視圖苏章,理論上一個tableViewController也不能放吧寂嘉,
只能說可以嵌入一個tableview視圖奏瞬。當然,題目本身也有歧義泉孩,如果不是我們定性思維認為的UIViewController硼端,而是宏觀的表示視圖控制者,那我們倒是可以把其看成一個視圖控制者寓搬,它可以控制多個視圖控制器珍昨,比如TabbarController那樣的感覺。
34. 一個tableView是否可以關聯兩個不同的數據源?你會怎么處理?
答:首先我們從代碼來看句喷,數據源如何關聯上的镣典,其實是在數據源關聯的代理方法里實現的。
因此我們并不關心如何去關聯他唾琼,他怎么關聯上兄春,方法只是讓我返回根據自己的需要去設置如相關的數據源。
因此锡溯,我覺得可以設置多個數據源啊赶舆,但是有個問題是,你這是想干嘛呢?想讓列表如何顯示祭饭,不同的數據源分區(qū)塊顯示?
35. 什么時候使用NSMutableArray芜茵,什么時候使用NSArray?
答:當數組在程序運行時,需要不斷變化的倡蝙,使用NSMutableArray九串,當數組在初始化后,便不再改變的寺鸥,使用NSArray猪钮。需要指出的是,使用NSArray只表明的是該數組在運行時不發(fā)生改變析既,即不能往NSAarry的數組里新增和刪除元素躬贡,但不表明其數組內的元素的內容不能發(fā)生改變。NSArray是線程安全的眼坏,NSMutableArray不是線程安全的拂玻,多線程使用到NSMutableArray需要注意。
36. 給出委托方法的實例宰译,并且說出UITableVIew的Data Source方法
答:CocoaTouch框架中用到了大量委托檐蚜,其中UITableViewDelegate就是委托機制的典型應用,是一個典型的使用委托來實現適配器模式沿侈,其中UITableViewDelegate協議是目標闯第,tableview是適配器,實現UITableViewDelegate協議缀拭,并將自身設置為talbeview的delegate的對象咳短,是被適配器填帽,一般情況下該對象是UITableViewController。
UITableVIew的Data Source方法有- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
37. 在應用中可以創(chuàng)建多少autorelease對象咙好,是否有限制?
答案:無
38. 如果我們不創(chuàng)建內存池篡腌,是否有內存池提供給我們?
答:界面線程維護著自己的內存池,用戶自己創(chuàng)建的數據線程勾效,則需要創(chuàng)建該線程的內存池
39. 什么時候需要在程序中創(chuàng)建內存池?
答:用戶自己創(chuàng)建的數據線程嘹悼,則需要創(chuàng)建該線程的內存池
40. 類NSObject的那些方法經常被使用?
答:NSObject是Objetive-C的基類,其由NSObject類及一系列協議構成层宫。
其中類方法alloc杨伙、class、 description 對象方法init萌腿、dealloc限匣、– performSelector:withObject:afterDelay:等經常被使用