iOS行業在經歷了過去幾年的爆發期後,現在到了一個相對冷靜的時期,一個良幣驅逐劣幣、去偽存真的階段。只有持續的專註和付出,才能夠在激烈的競爭中脫穎而出,成為強者。正如狄更斯所言,“這是一個最壞的時代,也是最好的時代” 。 對於這些面試題,不要死記硬背,應該舉一反三,深刻理解實現機制(這也是科班和非科 ...
iOS行業在經歷了過去幾年的爆發期後,現在到了一個相對冷靜的時期,一個良幣驅逐劣幣、去偽存真的階段。只有持續的專註和付出,才能夠在激烈的競爭中脫穎而出,成為強者。正如狄更斯所言,“這是一個最壞的時代,也是最好的時代” 。
對於這些面試題,不要死記硬背,應該舉一反三,深刻理解實現機制(這也是科班和非科班的區別之一)。面試題答案只是參考,如有錯誤請指正。
如果讓你實現屬性的weak,如何實現的?
runtime
對註冊的類會進行佈局,對於weak
修飾的對象會放入一個hash
表中。用weak指向的對象記憶體地址作為key,當此對象的引用計數為0的時候會dealloc
,假如weak
指向的對象記憶體地址是a,那麼就會以a為鍵在這個weak表中搜索,找到所有以a為鍵的weak
對象,從而設置為nil
。
如果讓你來實現屬性的atomic,如何實現?
- (void)setCurrentImage:(UIImage *)currentImage
{
@synchronized(self) {
if (_currentImage != currentImage) {
[_currentImage release];
_currentImage = [currentImage retain];
// do something
}
}
}
- (UIImage *)currentImage
{
@synchronized(self) {
return _currentImage;
}
}
KVO為什麼要創建一個子類來實現?
Runtime動態生成一個NSKVONotifying_Class子類,可以動態地添加willChangeValueForKey
和didChangeValueForKey
觀察所有屬性的變化
類結構體的組成,isa指針指向了什麼?(這裡應該將元類和根元類也說一下)
isa:是一個Class 類型的指針. 每個實例對象有個isa的指針,他指向對象的類,而Class里也有個isa的指針, 指向meteClass(元類)。元類保存了類方法的列表。當類方法被調用時,先會從本身查找類方法的實現,如果沒有,元類會向他父類查找該方法。同時註意的是:元類(meteClass)也是類,它也是對象。元類也有isa指針,它的isa指針最終指向的是一個根元類(root meteClass).根元類的isa指針指向本身,這樣形成了一個封閉的內迴圈。

RunLoop有幾種事件源?有幾種模式?
Runloop(消息迴圈)的目的:
1\. 基本作用:保持程式的持續運行,保證程式不退出
2\. 處理App中的各種事件(比如觸摸事件,定時器事件,Selector事件)
3\. 節省CPU資源,提高程式性能:該做事時做事,該休息是休息
- 事件源:輸入源和定時源
- 模式:有4種模式 第一種就是預設模式: 也就是一般的方法調用使用的模式。第二種就是跟蹤模式: 用於scrollview追蹤觸摸滑動, 使其不受其他模式的影響, 可以共存。 第三種就是當程式啟動時第一次開啟的運行迴圈模式。第四種的話一般開發中沒聽到過。沒有去研究過。其實還有一種占位模式。不過沒什麼太大用處。
方法列表的數據結構是什麼?
struct objc_method_list
{
struct objc_method_list* method_next; /* 這個變數用來鏈接另一個單獨的方法鏈表 */
int method_count; /* 結構中定義的方法數量 */
struct objc_method method_list[1]; /* 可變長度的結構 */
};
分類是如何實現的?它為什麼會覆蓋掉原來的方法?
因為分類方法加入類中這一操作是在運行期系統載入分類時完成的,運行期系統會把分類中所實現的每一個方法都加入類的方法列表中
- category的實例方法、協議以及屬性添加到類上
- category的類方法和協議添加到類的metaclass上
category的方法被放到了新方法列表的前面,而原來類的方法被放到了新方法列表的後面,所以category的方法會“覆蓋”掉原來類的同名方法。
希望我所分享的經驗能對您有所幫助,也希望您終能如願以償進入心儀的企業工作。
結交人脈
最後推薦個我的高級iOS交流群:1001906160 ,有一個共同的圈子很重要,結識人脈!裡面都是iOS開發,全棧發展,歡迎入駐,共同進步!(群內會免費提供一些群主收藏的免費學習書籍資料以及整理好的幾百道面試題和答案文檔!)