2017 iOS面試題 總結(jié)二

1. 什么是arc构灸?(arc是為了解決什么問(wèn)題誕生的?)

答:ARC 是 Automatic Reference Counting 的縮寫, 即自動(dòng)引用計(jì)數(shù). 這是蘋果在 iOS5 中引入的內(nèi)存管理機(jī)制.不僅能夠降低程序崩潰和內(nèi)存泄露的風(fēng)險(xiǎn), 而且可以減少開(kāi)發(fā)者的工作量, 能夠大幅度提升程序的 流暢性 和 可預(yù)測(cè)性 .

那么ARC是為了解決什么問(wèn)題誕生的呢?這個(gè)得追溯到MRC手動(dòng)內(nèi)存管理時(shí)代說(shuō)起草描。

MRC下內(nèi)存管理的缺點(diǎn):

1.當(dāng)我們要釋放一個(gè)堆內(nèi)存時(shí)懂算,首先要確定指向這個(gè)堆空間的指針都被release了。(避免提前釋放)

2.釋放指針指向的堆空間株憾,首先要確定哪些指針指向同一個(gè)堆蝙寨,這些指針只能釋放一次。(MRC下即誰(shuí)創(chuàng)建嗤瞎,誰(shuí)釋放墙歪,避免重復(fù)釋放)

3.模塊化操作時(shí),對(duì)象可能被多個(gè)模塊創(chuàng)建和使用贝奇,不能確定最后由誰(shuí)去釋放虹菲。

4.多線程操作時(shí),不確定哪個(gè)線程最后使用完畢

2掉瞳、以下 keywords 有什么區(qū)別: assign vs weak , __block vs __weak

答:assign 用于簡(jiǎn)單的賦值, 不改變屬性的引用計(jì)數(shù)

weak 用于對(duì)象類型, 由于 weak 同樣不改變對(duì)象的引用計(jì)數(shù)且不持有對(duì)象實(shí)例, 當(dāng)該對(duì)象廢棄時(shí), 該弱引用自動(dòng)失效并且被賦值為 nil , 所以它可以用于避免兩個(gè)強(qiáng)引用產(chǎn)生的 循環(huán)引用 導(dǎo)致內(nèi)存無(wú)法釋放的問(wèn)題.

__block 和 __weak 之間的卻是確實(shí)極大的, 不過(guò)它們都用于修飾變量.

前者用于指明當(dāng)前聲明的變量在被 block 捕獲之后, 可以在 block 中改變變量的值. 因?yàn)樵?block 聲明的同時(shí)會(huì)截獲該 block 所使用的全部自動(dòng)變量的值, 而這些值只在 block 中 只具有”使用權(quán)”而不具有”修改權(quán)” . 而 __block 說(shuō)明符就為 block 提供了變量的修改權(quán).

后者是 所有權(quán)修飾符 , 什么是所有權(quán)修飾符? 這里涉及到另一個(gè)問(wèn)題, 因?yàn)樵?ARC 有效時(shí), id 類型和對(duì)象類型同 C 語(yǔ)言中的其他類型不同, 必須附加所有權(quán)修飾符. 所有權(quán)修飾符一種有 4 種:

__strong __weak __unsafe_unretained __autorelease

__weak 與 weak 的區(qū)別只在于, 前者用于變量的聲明, 而后者用于屬性的聲明.

__block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:

1.__block不管是ARC還是MRC模式下都可以使用毕源,可以修飾對(duì)象,還可以修飾基本數(shù)據(jù)類型陕习。

2.__weak只能在ARC模式下使用霎褐,也只能修飾對(duì)象(NSString),不能修飾基本數(shù)據(jù)類型(int)衡查。

3.__block對(duì)象可以在block中被重新賦值瘩欺,__weak不可以。

也就是說(shuō)拌牲,在MRC下俱饿,我們通常使用__block,而在ARC下我們通常使用__weak,或者_(dá)_unsafe_unretained __block(不安全,不建議使用)來(lái)修飾防止循環(huán)引用而造成的內(nèi)存泄露塌忽。

4拍埠、KVO,NSNotification土居,delegate及block區(qū)別

答:KVO的使用也很簡(jiǎn)單枣购,就是簡(jiǎn)單的3步嬉探。

1.注冊(cè)需要觀察的對(duì)象的屬性addObserver:forKeyPath:options:context:

2.實(shí)現(xiàn)observeValueForKeyPath:ofObject:change:context:方法,這個(gè)方法當(dāng)觀察的屬性變化時(shí)會(huì)自動(dòng)調(diào)用

3.取消注冊(cè)觀察removeObserver:forKeyPath:context:

NSNotification是通知棉圈,也是一對(duì)多的使用場(chǎng)景涩堤。在某些情況下,KVO和NSNotification是一樣的分瘾,都是狀態(tài)變化之后告知對(duì)方胎围。NSNotification的特點(diǎn),就是需要被觀察者先主動(dòng)發(fā)出通知德召,然后觀察者注冊(cè)監(jiān)聽(tīng)后再來(lái)進(jìn)行響應(yīng)白魂,比KVO多了發(fā)送通知的一步,但是其優(yōu)點(diǎn)是監(jiān)聽(tīng)不局限于屬性的變化上岗,還可以對(duì)多種多樣的狀態(tài)變化進(jìn)行監(jiān)聽(tīng)福荸,監(jiān)聽(tīng)范圍廣,使用也更靈活肴掷。

delegate 是代理敬锐,就是我不想做的事情交給別人做。比如狗需要吃飯捆等,就通過(guò)delegate通知主人滞造,主人就會(huì)給他做飯、盛飯栋烤、倒水谒养,這些操作,這些狗都不需要關(guān)心明郭,只需要調(diào)用delegate(代理人)就可以了买窟,由其他類完成所需要的操作。所以delegate是一對(duì)一關(guān)系薯定。

block是delegate的另一種形式始绍,是函數(shù)式編程的一種形式。使用場(chǎng)景跟delegate一樣话侄,相比delegate更靈活亏推,而且代理的實(shí)現(xiàn)更直觀。

KVO一般的使用場(chǎng)景是數(shù)據(jù)年堆,需求是數(shù)據(jù)變化吞杭,比如股票價(jià)格變化,我們一般使用KVO(觀察者模式)变丧。delegate一般的使用場(chǎng)景是行為芽狗,需求是需要?jiǎng)e人幫我做一件事情,比如買賣股票痒蓬,我們一般使用delegate童擎。

Notification一般是進(jìn)行全局通知滴劲,比如利好消息一出,通知大家去買入顾复。delegate是強(qiáng)關(guān)聯(lián)班挖,就是委托和代理雙方互相知道,你委托別人買股票你就需要知道經(jīng)紀(jì)人捕透,經(jīng)紀(jì)人也不要知道自己的顧客聪姿。Notification是弱關(guān)聯(lián)碴萧,利好消息發(fā)出乙嘀,你不需要知道是誰(shuí)發(fā)的也可以做出相應(yīng)的反應(yīng),同理發(fā)消息的人也不需要知道接收的人也可以正常發(fā)出消息破喻。

5虎谢、__block在arc和非arc下含義一樣嗎?

答:在非arc中曹质,block修飾的變量的引用計(jì)算是不變的婴噩。

在arc中,會(huì)引用到羽德,并且計(jì)算+1几莽;

6、使用atomic一定是線程安全的嗎宅静?

答:atomic所說(shuō)的線程安全只是保證了getter和setter存取方法的線程安全章蚣,并不能保證整個(gè)對(duì)象是線程安全的。如下列所示:

比如:@property(atomic,strong)NSMutableArray *arr;

如果一個(gè)線程循環(huán)的讀數(shù)據(jù)姨夹,一個(gè)線程循環(huán)寫數(shù)據(jù)纤垂,那么肯定會(huì)產(chǎn)生內(nèi)存問(wèn)題,因?yàn)檫@和setter磷账、getter沒(méi)有關(guān)系峭沦。如使用[self.arr objectAtIndex:index]就不是線程安全的。好的解決方案就是加鎖逃糟。

7吼鱼、描述一個(gè)你遇到過(guò)的retain cycle例子。(別撒謊绰咽,你肯定遇到過(guò))

答: MJ刷新block方法中調(diào)用的時(shí)候菇肃,用的是weakSelf.

8、+(void)load; +(void)initialize剃诅;有什么用處巷送?

答:+ initialize和+ load是 NSObject 類的兩個(gè)類方法,它們會(huì)在運(yùn)行時(shí)自動(dòng)調(diào)用矛辕,我們可以利用其特性做一些初始化操作笑跛。

initialize和load的區(qū)別在于:load是只要類所在文件被引用就會(huì)被調(diào)用付魔,而initialize是在類或者其子類的第一個(gè)方法被調(diào)用前調(diào)用。所以如果類沒(méi)有被引用進(jìn)項(xiàng)目飞蹂,就不會(huì)有l(wèi)oad調(diào)用几苍;但即使類文件被引用進(jìn)來(lái),但是沒(méi)有使用陈哑,那么initialize也不會(huì)被調(diào)用妻坝。

詳看:http://www.reibang.com/p/24fbd2e9bb28


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市惊窖,隨后出現(xiàn)的幾起案子刽宪,更是在濱河造成了極大的恐慌,老刑警劉巖界酒,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件圣拄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡毁欣,警方通過(guò)查閱死者的電腦和手機(jī)庇谆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凭疮,“玉大人饭耳,你說(shuō)我怎么就攤上這事≈唇猓” “怎么了寞肖?”我有些...
    開(kāi)封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)材鹦。 經(jīng)常有香客問(wèn)我逝淹,道長(zhǎng),這世上最難降的妖魔是什么桶唐? 我笑而不...
    開(kāi)封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任栅葡,我火速辦了婚禮,結(jié)果婚禮上尤泽,老公的妹妹穿的比我還像新娘欣簇。我一直安慰自己,他們只是感情好坯约,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布熊咽。 她就那樣靜靜地躺著,像睡著了一般闹丐。 火紅的嫁衣襯著肌膚如雪横殴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音衫仑,去河邊找鬼梨与。 笑死,一個(gè)胖子當(dāng)著我的面吹牛文狱,可吹牛的內(nèi)容都是我干的粥鞋。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瞄崇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呻粹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起苏研,我...
    開(kāi)封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤等浊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后楣富,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凿掂,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年纹蝴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踪少。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡塘安,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出援奢,到底是詐尸還是另有隱情兼犯,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布集漾,位于F島的核電站切黔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏具篇。R本人自食惡果不足惜纬霞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驱显。 院中可真熱鬧诗芜,春花似錦、人聲如沸埃疫。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)栓霜。三九已至翠桦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胳蛮,已是汗流浹背销凑。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工愁铺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闻鉴。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓茵乱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親孟岛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓶竭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

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

  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,168評(píng)論 30 470
  • 基礎(chǔ) 1. 為什么說(shuō)Objective-C是一門動(dòng)態(tài)的語(yǔ)言? 2. 講一下MVC和MVVM渠羞,MVP斤贰? 3. 為...
    波妞和醬豆子閱讀 3,333評(píng)論 0 46
  • 1.屬性readwrite,readonly次询,assign荧恍,retain,copy屯吊,nonatomic 各是什么作...
    曾令偉閱讀 1,067評(píng)論 0 10
  • 1.Difference between shallow copy and deep copy? 淺復(fù)制和深復(fù)制的...
    用心在飛閱讀 992評(píng)論 0 9
  • 1. 父類實(shí)現(xiàn)深拷貝時(shí)送巡,子類如何實(shí)現(xiàn)深度拷貝。父類沒(méi)有實(shí)現(xiàn)深拷貝時(shí)盒卸,子類如何實(shí)現(xiàn)深度拷貝骗爆。 1.1 深拷貝同淺拷貝...
    iYeso閱讀 1,899評(píng)論 0 13