iOS 開發(fā) 基礎(chǔ)理論知識一(面試可用)

1. 內(nèi)存管理

? ? ? ? 在iOS 開發(fā)中, 使用引用計(jì)數(shù)來管理OC對象的內(nèi)存,新創(chuàng)建的OC對象的引用計(jì)數(shù)是1. 調(diào)用retain會是oc對象引用計(jì)數(shù)+1, 調(diào)用release會使oc對象的引用計(jì)數(shù)+1. 但引用計(jì)數(shù)減為0時, OC對象就會銷毀, 釋放占用內(nèi)存空間. 當(dāng)使用nwe, copy, mutableCopy, alloc方法返回了一個對象時, 在不需要這個對象時, 要使用release或者aoturelease釋放掉

2.深拷貝與淺拷貝

? ? ? ? copy淺拷貝, 不拷貝對象本身, 僅僅拷貝指向?qū)ο蟮闹羔? ? ?mutableCopy深拷貝, 是直接拷貝整個對象內(nèi)存到另一塊內(nèi)存中去, 淺拷貝不拷貝對象本身, 僅僅拷貝對象的指針, 深拷貝, 是直接拷貝整個對象到另一塊內(nèi)存中, 用copy修飾的或者賦值的變量肯定是不可變的, 用copy賦值, 要看源對象是否是可變的, 來決定只拷貝指針, 還是也拷貝對象到另一塊內(nèi)存空間, 對象之間mutablecopy賦值, 很定會拷貝還在呢個對象內(nèi)存到另一塊內(nèi)存中, 對象之間賦值之后, 在改變, 遵循互不影響原則, 準(zhǔn)則: 不可變對象的copy方法是淺拷貝, 其余的都是深拷貝.

3.weak指針實(shí)現(xiàn)原理

? ? ? ? weak表示的是一個弱引用, 這個引用不會增加對象的引用計(jì)數(shù), 并且在所指向的對象被釋放之后, weak指針會被設(shè)置成為nil, weak引用通常是處理循環(huán)引用的問題, 所引用對象的計(jì)數(shù)器不會+1, 并在引用對象被釋放的時候自動被設(shè)置為nil. MARK: 通常用于解決循環(huán)引用的問題

4. Copy. Strong. Weak. Assign的區(qū)別

assign:?

????1) 用于對基本數(shù)據(jù)類型進(jìn)行賦值操作, 不更改引用計(jì)數(shù).

? ? 2) 也可以用來修飾對象, 但是被assign修飾的對象在釋放后指針的地址還是存在的, 指針并沒有被置為nil, 成為野指針.

? ? 3) 之所以可以用來修飾基本數(shù)據(jù)類型, 是因?yàn)榛緮?shù)據(jù)類型一般分配在棧上棧的內(nèi)存會由系統(tǒng)自動處理, 不會造成野指針

weak:?

????1) 修飾object類型, 修飾的對象在釋放后, 侄子很抵制會被置為nil, 是一種弱引用.

? ? 2) 在ARC環(huán)境下, 為避免循環(huán)引用, 往往會把delegate屬性用weak修飾.

? ? 3) weak和strong不同的是: 當(dāng)一個對象不再有strong類型的指針指向它的時候, 他會被釋放,及時還有weak型指針指向他, 那么這些weak型指針也將被清除.

strong:

? ? 1) ARC模式下的strong 等同于retain都會把對象的引用計(jì)數(shù)+1

copy:

? ? 1) 會在內(nèi)存重拷貝一份對象, 兩個指針指向不同的內(nèi)存地址.

? ? 2) 一般用來修飾NSString等有對應(yīng)可變類型的對象, 因?yàn)樗麄冇锌赡芎蛯?yīng)的可變類型NSMutableString 之間進(jìn)行賦值操作, 為確滨锝幔可變對象變化時對象中的字符串不被修改, 應(yīng)該在設(shè)置屬性時拷貝一份.

? ? 3) 若用strong修飾, 如果可變對象變化, 對象中的字符串屬性也會跟著變化.

5. 進(jìn)程和線程的區(qū)別

????1) 一個線程只能屬于一個進(jìn)程

????2) 一個進(jìn)程可以擁有多個線程, 但至少有一個線程

? ? 3) 線程是操作系統(tǒng)可識別的最小執(zhí)行和調(diào)度單位.

6. 有哪些情況會出現(xiàn)內(nèi)存泄漏

? ? 1) black循環(huán)引用

? ? 2) delegate循環(huán)引用

? ? 3) NSTime循環(huán)引用

? ? 4) 地圖類處理 ?

? ? 5) 線程保活target: self

7. Socket連接和HTTP連接的區(qū)別

????1) HTTP協(xié)議是基于TCP連接的, 是應(yīng)用層協(xié)議, 主要解決如何包裝數(shù)據(jù), Socket是對TCP/IP協(xié)議的封裝, Socket本身并不是協(xié)議, 而是一個調(diào)用接口(API), 通過Socket我們才能使用TCP或ip協(xié)議.

? ? 2) HTTP連接: 短連接, 客戶端向服務(wù)器發(fā)送一次請求, 服務(wù)器響應(yīng)后連接斷開, 節(jié)省資源, 服務(wù)器不能主動給客戶端響應(yīng), IPhone主要使用類NSURLConnection.

? ? 3) Socket連接: 長連接, 客戶端跟服務(wù)器端直接使用Socket進(jìn)行連接, 沒有規(guī)定連接后斷開, 因此客戶端和服務(wù)端保持連接通道, 雙方可以主動發(fā)送數(shù)據(jù).

8. HTTP協(xié)議的特點(diǎn), 關(guān)于HTTP請求GET和POST的區(qū)別

????特點(diǎn):

????????1) HTTP超文本傳輸協(xié)議, 是短連接, 是客戶端主動發(fā)送請求, 服務(wù)器端做出響應(yīng)后, 鏈接斷開.

? ? ? ? 2) HTTP是一個屬于應(yīng)用層面向?qū)ο蟮膮f(xié)議, HTTP有兩類報(bào)文: 請求報(bào)文和響應(yīng)報(bào)文.

? ? ? ? 3) HTTP請求報(bào)文: 一個HTTP請求報(bào)文是由請求行 請求頭部 空行 和請求數(shù)據(jù)四部分組成.

? ? ? ? 4) HTTP響應(yīng)報(bào)文: 是由狀態(tài)行 消息報(bào)頭 響應(yīng)正文.

? ? GET請求 ? ?

? ? ? ? 1) 參數(shù)在地址后拼接, 不安全, 因?yàn)樗袇?shù)都拼接在地址后面是明文, 抓包工具可以看到參數(shù)具體.

? ? ? ? 2) 不適合傳輸大量數(shù)據(jù) 長度有限制, 為1024個字節(jié).

? ? POST請求

? ? ? ? 1) 參數(shù)在請求數(shù)據(jù)區(qū)放著, 相對GET請求更加安全.

? ? ? ? 2) 數(shù)據(jù)大小理論上沒有限制.

? ? ? ? 3) 提交的數(shù)據(jù)放置在HTTP包的報(bào)體中

9. 包體積優(yōu)化 ? ? ? ?

????安裝包瘦(IPA文件): 資源文件以及可執(zhí)行文件

? ? 資源文件(圖片 音頻 視頻等):

? ? ? ? 1) 采取無損壓縮(使用工具).

? ? ? ? 2) 去除沒有用到的資源(https://github.com/tinymind/LSUnusedResources)

? ? 可執(zhí)行文件瘦身:

? ? ? ? 1) 編譯器優(yōu)化 (xcode相關(guān)配置).

? ? ? ? 2) 利用APPcode(https://www.jetbrains.com/objc/)檢測未使用的代碼:菜單欄->Code->Inspect Code

? ? ? ? 3) 可借助第三方工具解析LinkMap文件:?http://github.com/huanxsd/LinkMap

10. nil Nil NULL NSNull的區(qū)別

? ? ? ? 1) nil: 指向一個對象的空指針

? ? ? ? 2) Nil: 指向一個類的空指針.

? ? ? ? 3) NULL: 指向其他類型(例如: 基本類型 C類型) 的空指針, 用于對非對象指針賦空值

? ? ? ? 4) NSNull: 在集合對象中, 標(biāo)識空值的對象.

? 11. assign weak retail strong copy 關(guān)鍵字的區(qū)別

? ? ? ? 1) assign: 用于對基本數(shù)據(jù)類型進(jìn)行賦值操作, 不更改引用計(jì)數(shù), 也可以用來修飾對象, 但是被assign修飾的對象釋放后指針的地址還是存在的, 也就是說指針并沒有被置為nil, 成為野指針, 如果后續(xù)再分配對象到堆上的某塊內(nèi)存時, 正好分到這塊地址, 程序就會crash, 之所可以修飾基本數(shù)據(jù)類型是因?yàn)榛緮?shù)據(jù)類型一般分配在棧上, 棧的內(nèi)存不會有系統(tǒng)自動處理, 不會造成野指針.

? ? ? ? 2) weak: 修飾object類型, 修飾的對象在釋放后, 指針地址會被職位nil, 是一種弱引用, 在ARC環(huán)境下為避免循環(huán)引用, 往往會把delegate屬性用weak修飾. 在MRC下使用assign修飾, weak和strong不同的是: 當(dāng)一個對象不再有strong類型的指針指向它的時候, 他就會被釋放, 即使還有weak型指針指向它, 那么這些weak型指針也將被清除.

? ? ? ? 3) ARC下的strong等同于MRC下的retain都會把引用計(jì)數(shù)+1.

? ? ? ? 4) copy: 會在內(nèi)存里拷貝一份對象, 兩個指針指向不同的內(nèi)存地址, 一般用來修飾NSString等有對應(yīng)可變類型的對象, 因?yàn)樗麄冇锌赡芎蛯?yīng)的可變類型(NSMutableString)之間進(jìn)行賦值操作, 為能確保可變對象變化時, 對象中的字符串不被不修改, 應(yīng)該在設(shè)置屬性時拷貝一份. 而若用strong修飾, 如果可變對象變化, 對象中的字符串屬性也會跟著變化.

? ? ? ? 5) __weak: 只在ARC中使用, 只能修飾對象, 補(bǔ)鞥呢修飾基本數(shù)據(jù)類型(int bool等). 同時, 在ARC下, 要避免black出現(xiàn)循環(huán)引用, 經(jīng)常會__weak typedof(self) weakSelf = self;

12. iOS viewController 生命周期

? ? ? ? 1) viewDidload

? ? ? ? 2) viewWillAppear

? ? ? ? 3) viewDidAppear

? ? ? ? 4) viewWillDisappear

? ? ? ? 5) viewDidDisappear

? ? ? ? 6) dealloc

13. iOS import, include, class, #import "" ?和#import <> 區(qū)別

? ? ? ? 1) #import "" 表示引用自己本地創(chuàng)建的頭文件

? ? ? ? 2) #import <> 表示引用庫文件 (系統(tǒng)文件)

? ? ? ? 3) #import 可以自動防止導(dǎo)入重復(fù)

? ? ? ? 4) 導(dǎo)入objective c 的頭文件時用#import, ?導(dǎo)入c/c++頭文件時使用#include.?

? ? ? ? 5) #include 和#import主要區(qū)別是import 會自動避免重復(fù)導(dǎo)入頭文件, include則需要手動避免重復(fù)導(dǎo)入,?

14. iOS 有哪些設(shè)計(jì)模式

? ? ? ? 1) 單例模式

? ? ? ? ? ? 保證一個類僅有一個實(shí)例, 并提供一個訪問它的全局訪問點(diǎn).

? ? ? ? 2) 代理模式

? ? ? ? ? ? 給某一個對象提供一個代理, 并由代理對象來控制原對象的訪問

? ? ? ? 3) 觀察者模式

? ? ? ? ? ? 定義對象的一種一對多的依賴關(guān)系, 當(dāng)一個對象的狀態(tài)發(fā)生改變時, 所有以來于他的對象都得到通知并自動更新.?

? ? ? ? 4) 工廠方法模式

? ? ? ? ? ? 定義創(chuàng)建對象的接口, 讓子類決定實(shí)例化哪一個類, 工廠方法使的類的實(shí)例化延遲到其子類.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劳吠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晚碾,更是在濱河造成了極大的恐慌牡昆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僚饭,死亡現(xiàn)場離奇詭異,居然都是意外死亡胧砰,警方通過查閱死者的電腦和手機(jī)鳍鸵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尉间,“玉大人偿乖,你說我怎么就攤上這事≌艹埃” “怎么了贪薪?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長眠副。 經(jīng)常有香客問我画切,道長,這世上最難降的妖魔是什么囱怕? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任霍弹,我火速辦了婚禮毫别,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘典格。我一直安慰自己岛宦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布耍缴。 她就那樣靜靜地躺著砾肺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪防嗡。 梳的紋絲不亂的頭發(fā)上变汪,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音本鸣,去河邊找鬼疫衩。 笑死,一個胖子當(dāng)著我的面吹牛荣德,可吹牛的內(nèi)容都是我干的闷煤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涮瞻,長吁一口氣:“原來是場噩夢啊……” “哼鲤拿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起署咽,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤近顷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宁否,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窒升,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年慕匠,在試婚紗的時候發(fā)現(xiàn)自己被綠了饱须。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡台谊,死狀恐怖蓉媳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锅铅,我是刑警寧澤酪呻,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站盐须,受9級特大地震影響玩荠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一阶冈、第九天 我趴在偏房一處隱蔽的房頂上張望屉凯。 院中可真熱鬧,春花似錦眼溶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绑咱,卻和暖如春绰筛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背描融。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工铝噩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窿克。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓骏庸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親年叮。 傳聞我的和親對象是個殘疾皇子具被,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

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

  • 在簡書看到大牛的知識點(diǎn),發(fā)現(xiàn)很多知識點(diǎn)自己一知半解,能做項(xiàng)目但理論不夠扎實(shí),默默地去百度總結(jié)一下.放到這里和...
    時光憧憧閱讀 344評論 0 1
  • 前言: 最近公司項(xiàng)目不怎么忙, 閑暇時間把iOS 在面試中可能會遇到的問題整理了一番, 一部分題目是自己面試遇到...
    Leon_520閱讀 16,492評論 10 138
  • 喜歡就關(guān)注我唄! 1.設(shè)計(jì)模式是什么只损? 你知道哪些設(shè)計(jì)模式一姿,并簡要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn)跃惫,就是用比較成熟的...
    iOS白水閱讀 1,106評論 0 2
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月叮叹,有人笑有人哭,有人歡樂有人憂愁爆存,有人驚喜有人失落蛉顽,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53
  • 信任包括信任自己和信任他人 很多時候,很多事情终蒂,失敗蜂林、遺憾、錯過拇泣,源于不自信噪叙,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,190評論 4 8