iOS常見問題梳理(一)

序言

目前形勢,參加到iOS隊(duì)伍的人是越來越多村缸,甚至已經(jīng)到供過于求了祠肥。今年,找過工作人可能會更深刻地體會到今年的就業(yè)形勢不容樂觀梯皿,加之仇箱,培訓(xùn)機(jī)構(gòu)一火車地向用人單位輸送iOS開發(fā)人員县恕,打破了生態(tài)圈的動(dòng)態(tài)平衡。矯情一下剂桥,言歸正傳忠烛,我奉獻(xiàn)一下,為iOS應(yīng)聘者梳理一下面試題渊额,希望能助一臂之力!

OC的理解與特性

OC作為一門面向?qū)ο蟮恼Z言况木,自然具有面向?qū)ο蟮恼Z言特性:封裝、繼承旬迹、多態(tài)。它既具有靜態(tài)語言的特性(如C++)求类,又有動(dòng)態(tài)語言的效率(動(dòng)態(tài)綁定奔垦、動(dòng)態(tài)加載等)∈總體來講椿猎,OC確實(shí)是一門不錯(cuò)的編程語言,

Objective-C具有相當(dāng)多的動(dòng)態(tài)特性寿弱,表現(xiàn)為三方面:動(dòng)態(tài)類型(Dynamic typing)犯眠、動(dòng)態(tài)綁定(Dynamic binding)和動(dòng)態(tài)加載(Dynamic loading)。動(dòng)態(tài)——必須到運(yùn)行時(shí)(run time)才會做的一些事情症革。

動(dòng)態(tài)類型:即運(yùn)行時(shí)再決定對象的類型筐咧,這種動(dòng)態(tài)特性在日常的應(yīng)用中非常常見,簡單來說就是id類型噪矛。事實(shí)上量蕊,由于靜態(tài)類型的固定性和可預(yù)知性,從而使用的更加廣泛艇挨。靜態(tài)類型是強(qiáng)類型残炮,而動(dòng)態(tài)類型屬于弱類型,運(yùn)行時(shí)決定接受者缩滨。

動(dòng)態(tài)綁定:基于動(dòng)態(tài)類型势就,在某個(gè)實(shí)例對象被確定后,其類型便被確定了脉漏,該對象對應(yīng)的屬性和響應(yīng)消息也被完全確定苞冯。

動(dòng)態(tài)加載:根據(jù)需求加載所需要的資源,最基本就是不同機(jī)型的適配鸠删,例如抱完,在Retina設(shè)備上加載@2x的圖片,而在老一些的普通蘋設(shè)備上加載原圖刃泡,讓程序在運(yùn)行時(shí)添加代碼模塊以及其他資源巧娱,用戶可根據(jù)需要加載一些可執(zhí)行代碼和資源碉怔,而不是在啟動(dòng)時(shí)就加載所有組件,可執(zhí)行代碼可以含有和程序運(yùn)行時(shí)整合的新類禁添。

簡述內(nèi)存管理基本原則

之前:OC內(nèi)存管理遵循“誰創(chuàng)建撮胧,誰釋放,誰引用老翘,誰管理”的機(jī)制芹啥,當(dāng)創(chuàng)建或引用一個(gè)對象的時(shí)候,需要向她發(fā)送alloc铺峭、copy墓怀、retain消息,當(dāng)釋放該對象時(shí)需要發(fā)送release消息卫键,當(dāng)對象引用計(jì)數(shù)為0時(shí)傀履,系統(tǒng)將釋放該對象,這是OC的手動(dòng)管理機(jī)制(MRC)莉炉。

目前:iOS 5.0之后引用自動(dòng)管理機(jī)制——自動(dòng)引用計(jì)數(shù)(ARC)钓账,管理機(jī)制與手動(dòng)機(jī)制一樣,只是不再需要調(diào)用retain絮宁、release梆暮、autorelease;它編譯時(shí)的特性绍昂,當(dāng)你使用ARC時(shí)啦粹,在適當(dāng)位置插入release和autorelease;它引用strong和weak關(guān)鍵字治专,strong修飾的指針變量指向?qū)ο髸r(shí)卖陵,當(dāng)指針指向新值或者指針不復(fù)存在,相關(guān)聯(lián)的對象就會自動(dòng)釋放张峰,而weak修飾的指針變量指向?qū)ο罄崮瑁?dāng)對象的擁有者指向新值或者不存在時(shí)weak修飾的指針會自動(dòng)置為nil。

如果使用alloc喘批、copy(mutableCopy)或者retian一個(gè)對象時(shí),你就有義務(wù),向它發(fā)送一條release或者autorelease消息撩荣。其他方法創(chuàng)建的對象,不需要由你來管理內(nèi)存。

向一個(gè)對象發(fā)送一條autorelease消息,這個(gè)對象并不會立即銷毀, 而是將這個(gè)對象放入了自動(dòng)釋放池,待池子釋放時(shí),它會向池中每一個(gè)對象發(fā)送 一條release消息,以此來釋放對象.

向一個(gè)對象發(fā)送release消息,并不意味著這個(gè)對象被銷毀了,而是當(dāng)這個(gè)對象的引用計(jì)數(shù)為0時(shí),系統(tǒng)才會調(diào)用dealloc方法,釋放該對象和對象本身它所擁有的實(shí)例饶深。

其他注意事項(xiàng)

如果一個(gè)對象有一個(gè)_strong類型的指針指向著餐曹,找個(gè)對象就不會被釋放。如果一個(gè)指針指向超出了它的作用域敌厘,就會被指向nil台猴。如果一個(gè)指針被指向nil,那么它原來指向的對象就被釋放了。當(dāng)一個(gè)視圖控制器被釋放時(shí)饱狂,它內(nèi)部的全局指針會被指向nil曹步。用法“:不管全局變量還是局部變量用_strong描述就行。

局部變量:出了作用域休讳,指針會被置為nil讲婚。

方法內(nèi)部創(chuàng)建對象,外部使用需要添加_autorelease;

連線的時(shí)候俊柔,用_weak描述筹麸。

代理使用unsafe_unretained就相當(dāng)于assign;

block中為了避免循環(huán)引用問題雏婶,使用_weak描述物赶;

聲明屬性時(shí),不要以new開頭留晚。如果非要以new開頭命名屬性的名字块差,需要自己定制get方法名,如

@property(getter=theString)?NSString?*?newString;

如果要使用自動(dòng)釋放池倔丈,用@autoreleasepool{}

ARC只能管理Foundation框架的變量,如果程序中把Foundation中的變量強(qiáng)制換成COre Foundation中的變量需要交換管理權(quán)状蜗;

在非ARC工程中采用ARC去編譯某些類:-fobjc-arc需五。

在ARC下的工程采用非ARC去編譯某些類:-fno-fobjc-arc。

如何理解MVC設(shè)計(jì)模式

MVC是一種架構(gòu)模式轧坎,M表示MOdel宏邮,V表示視圖View,C表示控制器Controller:

Model負(fù)責(zé)存儲缸血、定義蜜氨、操作數(shù)據(jù);

View用來展示書給用戶捎泻,和用戶進(jìn)行操作交互飒炎;

Controller是Model和View的協(xié)調(diào)者,Controller把Model中的數(shù)據(jù)拿過來給View用笆豁。Controller可以直接與Model和View進(jìn)行通信郎汪,而View不能和Controller直接通信。View與Controller通信需要利用代理協(xié)議的方式闯狱,當(dāng)有數(shù)據(jù)更新時(shí)煞赢,MOdel也要與Controller進(jìn)行通信,這個(gè)時(shí)候就要用Notification和KVO哄孤,這個(gè)方式就像一個(gè)廣播一樣照筑,MOdel發(fā)信號,Controller設(shè)置監(jiān)聽接受信號,當(dāng)有數(shù)據(jù)更新時(shí)就發(fā)信號給Controller凝危,Model和View不能直接進(jìn)行通信波俄,這樣會違背MVC設(shè)計(jì)模式。

如何理解MVVM設(shè)計(jì)模式

ViewModel層媒抠,就是View和Model層的粘合劑弟断,他是一個(gè)放置用戶輸入驗(yàn)證邏輯,視圖顯示邏輯趴生,發(fā)起網(wǎng)絡(luò)請求和其他各種各樣的代碼的極好的地方阀趴。說白了,就是把原來ViewController層的業(yè)務(wù)邏輯和頁面邏輯等剝離出來放到ViewModel層苍匆。

View層刘急,就是ViewController層,他的任務(wù)就是從ViewModel層獲取數(shù)據(jù)浸踩,然后顯示叔汁。

如需了解更多,請查看這篇文章

Objective-C 中是否支持垃圾回收機(jī)制检碗?

OC是支持垃圾回收機(jī)制的(Garbage collection簡稱GC),但是apple的移動(dòng)終端中,是不支持GC的,Mac桌面系統(tǒng)開發(fā)中是支持的.

移動(dòng)終端開發(fā)是支持ARC(Automatic Reference Counting的簡稱),ARC是在IOS5之后推出的新技術(shù),它與GC的機(jī)制是不同的据块。我們在編寫代碼時(shí), 不需要向?qū)ο蟀l(fā)送release或者autorelease方法,也不可以調(diào)用delloc方法,編譯器會在合適的位置自動(dòng)給用戶生成release消息(autorelease),ARC 的特點(diǎn)是自動(dòng)引用技術(shù)簡化了內(nèi)存管理的難度.

協(xié)議的基本概念和協(xié)議中方法默認(rèn)為什么類型

OC中的協(xié)議是一個(gè)方法列表,且多少有點(diǎn)相關(guān)。它的特點(diǎn)是可以被任何類使用(實(shí)現(xiàn)),但它并不是類(這里我們需要注意),自身不會實(shí)現(xiàn)這樣方法, 而是又其他人來實(shí)現(xiàn)協(xié)議經(jīng)常用來實(shí)現(xiàn)委托對象(委托設(shè)計(jì)模式)折剃。如果一個(gè)類采用了一個(gè)協(xié)議,那么它必須實(shí)現(xiàn)協(xié)議中必須需要實(shí)現(xiàn)的方法,在協(xié)議中的方法默認(rèn)是必須實(shí)現(xiàn)(@required),添加關(guān)鍵字@optional,表明一旦采用該協(xié)議,這些“可選”的方法是可以選擇不實(shí)現(xiàn)的另假。

簡述類目category優(yōu)點(diǎn)和缺點(diǎn)

優(yōu)點(diǎn):

不需要通過增加子類而增加現(xiàn)有類的行為(方法),且類目中的方法與原始類方法基本沒有區(qū)別;

通過類目可以將龐大一個(gè)類的方法進(jìn)行劃分,從而便于代碼的日后的維護(hù)、更新以及提高代碼的閱讀性;

缺點(diǎn):

無法向類目添加實(shí)例變量,如果需要添加實(shí)例變量,只能通過定義子類的方式;

類目中的方法與原始類以及父類方法相比具有更高優(yōu)先級,如果覆蓋父類的方法,可能導(dǎo)致super消息的斷裂怕犁。因此,最好不要覆蓋原始類中的方法边篮。

類別的作用

給系統(tǒng)原有類添加方法,不能擴(kuò)展屬性奏甫。如果類別中方法的名字跟系統(tǒng)的方法名一樣戈轿,在調(diào)用的時(shí)候類別中的方法優(yōu)先級更高;

分散類的實(shí)現(xiàn):如:

+?(NSIndexPath*)indexPathForRow:(NSInteger)rowinSection:(NSInteger)section

原本屬于NSIndexPath的方法阵子,但因?yàn)檫@個(gè)方法經(jīng)常使用的表的時(shí)候調(diào)用头镊、跟表的關(guān)系特別密切取胎,因此把這個(gè)方法一類別的形式涩澡、聲明在UITableView.h中咕娄。

聲明私有方法,某一個(gè)方法只實(shí)現(xiàn)奈梳,不聲明杈湾,相當(dāng)于私有方法。

類別不能聲明變量攘须,類別不可以直接添加屬性漆撞。property描述setter方法,就不會報(bào)錯(cuò)。

循環(huán)引用的產(chǎn)生原因浮驳,以及解決方法

產(chǎn)生原因:如下圖所示悍汛,對象A和對象B相互引用了對方作為自己的成員變量,只有自己銷毀的時(shí)候才能將成員變量的引用計(jì)數(shù)減1至会。對象A的銷毀依賴于對象B的銷毀离咐,同時(shí)對象B銷毀也依賴與對象A的銷毀,從而形成循環(huán)引用奉件,此時(shí)宵蛀,即使外界沒有任何指針訪問它,它也無法釋放县貌。

循環(huán)引用示例圖

多個(gè)對象間依然會存在循環(huán)引用問題术陶,形成一個(gè)環(huán),在編程中煤痕,形成的環(huán)越大越不容易察覺梧宫,如下圖所示:

多個(gè)對象引用示例圖

解決方法:

事先知道存在循環(huán)引用的地方,在合理的位置主動(dòng)斷開一個(gè)引用摆碉,是對象回收塘匣;

使用弱引用的方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巷帝,一起剝皮案震驚了整個(gè)濱河市馆铁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锅睛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件历谍,死亡現(xiàn)場離奇詭異现拒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)望侈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門印蔬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脱衙,你說我怎么就攤上這事侥猬。” “怎么了捐韩?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵退唠,是天一觀的道長。 經(jīng)常有香客問我荤胁,道長瞧预,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮垢油,結(jié)果婚禮上盆驹,老公的妹妹穿的比我還像新娘。我一直安慰自己滩愁,他們只是感情好躯喇,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硝枉,像睡著了一般廉丽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上檀咙,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天雅倒,我揣著相機(jī)與錄音,去河邊找鬼弧可。 笑死蔑匣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棕诵。 我是一名探鬼主播裁良,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼校套!你這毒婦竟也來了价脾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤笛匙,失蹤者是張志新(化名)和其女友劉穎侨把,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妹孙,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秋柄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蠢正。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骇笔。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嚣崭,靈堂內(nèi)的尸體忽然破棺而出笨触,到底是詐尸還是另有隱情,我是刑警寧澤雹舀,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布芦劣,位于F島的核電站,受9級特大地震影響说榆,放射性物質(zhì)發(fā)生泄漏持寄。R本人自食惡果不足惜源梭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稍味。 院中可真熱鬧废麻,春花似錦、人聲如沸模庐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掂碱。三九已至怜姿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疼燥,已是汗流浹背沧卢。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留醉者,地道東北人但狭。 一個(gè)月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像撬即,于是被迫代替她去往敵國和親立磁。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

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

  • 轉(zhuǎn)自 iOS 面試常見問題最全梳理 序言 目前形勢剥槐,參加到iOS隊(duì)伍的人是越來越多唱歧,甚至已經(jīng)到供過于求了。今年粒竖,找...
    ZMJun閱讀 800評論 0 11
  • http://www.devstore.cn/essay/essayInfo/6525.html【原文地址】 序言...
    起名好難_fz閱讀 650評論 1 1
  • 37.cocoa內(nèi)存管理規(guī)則 1)當(dāng)你使用new颅崩,alloc或copy方法創(chuàng)建一個(gè)對象時(shí),該對象的保留計(jì)數(shù)器值為1...
    如風(fēng)家的秘密閱讀 856評論 0 4
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,168評論 30 470
  • 序言 目前形勢,參加到iOS隊(duì)伍的人是越來越多岁歉,甚至已經(jīng)到供過于求了。今年膝蜈,找過工作人可能會更深刻地體會到今年的就...
    Jack_lin閱讀 78,414評論 110 1,945