iOS最新面試題匯總(二)

iOS最新面試題匯總:
iOS最新面試題匯總(一)
iOS最新面試題匯總(二)
iOS最新面試題匯總(三)
iOS最新面試題匯總(四)

  1. Objective-C 中創(chuàng)建線程的方法是什么庵楷?如果在主線程中執(zhí)行代碼罢艾,方法是什么?如果想延時執(zhí)行代碼尽纽、方法又是什么咐蚯?

答:線程創(chuàng)建有三種方法:使用NSThread創(chuàng)建、使用GCD的dispatch弄贿、使用子類化的NSOperation,然后將其加入NSOperationQueue;在主線程執(zhí)行代碼春锋,方法是performSelectorOnMainThread,如果想延時執(zhí)行代碼可以用performSelector:onThread:withObject:waitUntilDone:

  1. Category(類別)差凹、 Extension(擴展)和繼承的區(qū)別

區(qū)別:

  1. 分類有名字期奔,類擴展沒有分類名字,是一種特殊的分類直奋。
  2. 分類只能擴展方法(屬性僅僅是聲明,并沒真正實現(xiàn))施禾,類擴展可以擴展屬性脚线、成員變量和方法。
  3. 繼承可以增加弥搞,修改或者刪除方法邮绿,并且可以增加屬性。
  1. 我們說的OC是動態(tài)運行時語言是什么意思攀例?

答:主要是將數(shù)據(jù)類型的確定由編譯時船逮,推遲到了運行時。簡單來說, 運行時機制使我們直到運行時才去決定一個對象的類別,以及調(diào)用該類別對象指定方法粤铭。

  1. 為什么我們常見的delegate屬性都用是weak而不是retain/strong挖胃?

答:是為了防止delegate兩端產(chǎn)生不必要的循環(huán)引用。
@property (nonatomic, weak) id<UITableViewDelegate> delegate;

  1. 什么時候用delegate梆惯,什么時候用Notification酱鸭?

Delegate(委托模式):1對1的反向消息通知功能。
Notification(通知模式):只想要把消息發(fā)送出去垛吗,告知某些狀態(tài)的變化凹髓。但是并不關(guān)心誰想要知道這個。

  1. 什么是 KVO 和 KVC怯屉?

1). KVC(Key-Value-Coding):鍵值編碼 是一種通過字符串間接訪問對象的方式(即給屬性賦值)
舉例說明:
stu.name = @"張三" // 點語法給屬性賦值
[stu setValue:@"張三" forKey:@"name"]; // 通過字符串使用KVC方式給屬性賦值
stu1.nameLabel.text = @"張三";
[stu1 setValue:@"張三" forKey:@"nameLabel.text"]; // 跨層賦值
2). KVO(key-Value-Observing):鍵值觀察機制 他提供了觀察某一屬性變化的方法蔚舀,極大的簡化了代碼饵沧。
KVO只能被KVC觸發(fā),包括使用setValue:forKey:方法和點語法赌躺。
// 通過下方方法為屬性添加KVO觀察

  1. -(void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
    // 當(dāng)被觀察的屬性發(fā)送變化時狼牺,會自動觸發(fā)下方方法

  2. (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{}
    KVC 和 KVO 的 keyPath 可以是屬性、實例變量寿谴、成員變量锁右。

  3. KVC的底層實現(xiàn)?

當(dāng)一個對象調(diào)用setValue方法時讶泰,方法內(nèi)部會做以下操作:
1). 檢查是否存在相應(yīng)的key的set方法咏瑟,如果存在,就調(diào)用set方法痪署。
2). 如果set方法不存在码泞,就會查找與key相同名稱并且?guī)聞澗€的成員變量,如果有狼犯,則直接給成員變量屬性賦值余寥。
3). 如果沒有找到_key,就會查找相同名稱的屬性key悯森,如果有就直接賦值宋舷。
4). 如果還沒有找到,則調(diào)用valueForUndefinedKey:和setValue:forUndefinedKey:方法瓢姻。
這些方法的默認(rèn)實現(xiàn)都是拋出異常祝蝠,我們可以根據(jù)需要重寫它們。

  1. KVO的底層實現(xiàn)幻碱?

KVO基于runtime機制實現(xiàn)绎狭。

  1. ViewController生命周期

按照執(zhí)行順序排列:
1.initWithCoder:通過nib文件初始化時觸發(fā)。
2.awakeFromNib:nib文件被加載的時候褥傍,會發(fā)生一個awakeFromNib的消息到nib文件中的每個對象儡嘶。
3.loadView:開始加載視圖控制器自帶的view。
4.viewDidLoad:視圖控制器的view被加載完成恍风。
5.viewWillAppear:視圖控制器的view將要顯示在window上蹦狂。
6.updateViewConstraints:視圖控制器的view開始更新AutoLayout約束。
7.viewWillLayoutSubviews:視圖控制器的view將要更新內(nèi)容視圖的位置朋贬。
8.viewDidLayoutSubviews:視圖控制器的view已經(jīng)更新視圖的位置鸥咖。
9.viewDidAppear:視圖控制器的view已經(jīng)展示到window上。
10.viewWillDisappear:視圖控制器的view將要從window上消失兄世。
11.viewDidDisappear:視圖控制器的view已經(jīng)從window上消失啼辣。

  1. 方法和選擇器有何不同?

selector是一個方法的名字御滩,方法是一個組合體鸥拧,包含了名字和實現(xiàn)党远。

  1. 你是否接觸過OC中的反射機制?簡單聊一下概念和使用

1). class反射
通過類名的字符串形式實例化對象富弦。
Class class = NSClassFromString(@"student");
Student *stu = [[class alloc] init];
將類名變?yōu)樽址?br> Class class =[Student class];
NSString className = NSStringFromClass(class);
2). SEL的反射
通過方法的字符串形式實例化方法沟娱。
SEL selector = NSSelectorFromString(@"setName");
[stu performSelector:selector withObject:@"Mike"];
將方法變成字符串。
NSStringFromSelector(@selector
(setName:));

  1. 調(diào)用方法有兩種方式:

1). 直接通過方法名來調(diào)用腕柜。[person show];
2). 間接的通過SEL數(shù)據(jù)來調(diào)用 SEL aaa = @selector(show); [person performSelector:aaa];

  1. 如何對iOS設(shè)備進行性能測試济似?

答: Profile-> Instruments ->Time Profiler

  1. 開發(fā)項目時你是怎么檢查內(nèi)存泄露?

1). 靜態(tài)分析 analyze盏缤。
2). instruments工具里面有個leak可以動態(tài)分析砰蠢。

  1. 什么是懶加載?

答:懶加載就是只在用到的時候才去初始化唉铜。也可以理解成延時加載台舱。
我覺得最好也最簡單的一個例子就是tableView中圖片的加載顯示了, 一個延時加載, 避免內(nèi)存過高,一個異步加載,避免線程堵塞提高用戶體驗。

  1. 類變量的 @public潭流,@protected竞惋,@private,@package 聲明各有什么含義灰嫉?

@public 任何地方都能訪問;
@protected 該類和子類中訪問,是默認(rèn)的;
@private 只能在本類中訪問;
@package 本包內(nèi)使用,跨包不可以拆宛。

  1. 什么是謂詞?

謂詞就是通過NSPredicate給定的邏輯條件作為約束條件,完成對數(shù)據(jù)的篩選讼撒。
//定義謂詞對象,謂詞對象中包含了過濾條件(過濾條件比較多)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age<%d",30];
//使用謂詞條件過濾數(shù)組中的元素,過濾之后返回查詢的結(jié)果
NSArray *array = [persons filteredArrayUsingPredicate:predicate];

  1. isa指針問題

isa:是一個Class 類型的指針. 每個實例對象有個isa的指針,他指向?qū)ο蟮念?而Class里也有個isa的指針, 指向meteClass(元類)浑厚。元類保存了類方法的列表。當(dāng)類方法被調(diào) 用時,先會從本身查找類方法的實現(xiàn),如果沒有,元類會向他父類查找該方法椿肩。同時注意的是:元類(meteClass)也是類,它也是對象瞻颂。元類也有isa指針,它的isa指針最終指向的是一個根元類(root meteClass)豺谈。根元類的isa指針指向本身,這樣形成了一個封閉的內(nèi)循環(huán)郑象。

  1. 如何訪問并修改一個類的私有屬性?

1). 一種是通過KVC獲取茬末。
2). 通過runtime訪問并修改私有屬性厂榛。

  1. 一個objc對象的isa的指針指向什么?有什么作用丽惭?

答:指向他的類對象,從而可以找到對象上的方法击奶。

聯(lián)系

github地址:https://github.com/meetly
希望大家多多指教!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末责掏,一起剝皮案震驚了整個濱河市柜砾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌换衬,老刑警劉巖痰驱,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件证芭,死亡現(xiàn)場離奇詭異,居然都是意外死亡担映,警方通過查閱死者的電腦和手機废士,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝇完,“玉大人官硝,你說我怎么就攤上這事《掏桑” “怎么了氢架?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忿危。 經(jīng)常有香客問我达箍,道長,這世上最難降的妖魔是什么铺厨? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任缎玫,我火速辦了婚禮,結(jié)果婚禮上解滓,老公的妹妹穿的比我還像新娘赃磨。我一直安慰自己,他們只是感情好洼裤,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布邻辉。 她就那樣靜靜地躺著,像睡著了一般腮鞍。 火紅的嫁衣襯著肌膚如雪值骇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天移国,我揣著相機與錄音吱瘩,去河邊找鬼。 笑死迹缀,一個胖子當(dāng)著我的面吹牛使碾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祝懂,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼倦春,長吁一口氣:“原來是場噩夢啊……” “哼尼荆!你這毒婦竟也來了杈湾?” 一聲冷哼從身側(cè)響起膝迎,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祟剔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傅事,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年峡扩,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹭越。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡教届,死狀恐怖响鹃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情案训,我是刑警寧澤买置,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站强霎,受9級特大地震影響忿项,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜城舞,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一轩触、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧家夺,春花似錦脱柱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至煌茴,卻和暖如春随闺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔓腐。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工矩乐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人合住。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓绰精,卻偏偏與公主長得像撒璧,于是被迫代替她去往敵國和親透葛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

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

  • 設(shè)計模式是什么卿樱? 你知道哪些設(shè)計模式僚害,并簡要敘述? 設(shè)計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去處理某一種類型的...
    不懂后悔閱讀 826評論 0 53
  • 設(shè)計模式是什么萨蚕? 你知道哪些設(shè)計模式靶草,并簡要敘述?設(shè)計模式是一種編碼經(jīng)驗岳遥,就是用比較成熟的邏輯去處理某一種類型的事...
    irenb閱讀 5,222評論 1 21
  • 設(shè)計模式是什么奕翔? 你知道哪些設(shè)計模式,并簡要敘述浩蓉? 設(shè)計模式是一種編碼經(jīng)驗派继,就是用比較成熟的邏輯去處理某一種類型的...
    small_Sun閱讀 454評論 0 4
  • 設(shè)計模式是什么? 你知道哪些設(shè)計模式捻艳,并簡要敘述驾窟? 設(shè)計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去處理某一種類型的...
    如果我們是朋友閱讀 675評論 0 9
  • 設(shè)計模式是什么认轨? 你知道哪些設(shè)計模式绅络,并簡要敘述?設(shè)計模式是一種編碼經(jīng)驗嘁字,就是用比較成熟的邏輯去處理某一種類型的事...
    騂躍神話閱讀 877評論 0 11