iOS最新面試錦集

搬運(yùn)了一些其他網(wǎng)站的,然后自己添加了一些,方便查看。

1、為什么說(shuō)Objective-C是一門(mén)動(dòng)態(tài)的語(yǔ)言?

① 什么是動(dòng)態(tài)語(yǔ)言?

動(dòng)態(tài)語(yǔ)言,是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu):新的函數(shù)可以被引進(jìn),已有的函數(shù)可以被刪除等在結(jié)構(gòu)上的變化。比如眾所周知的ECMAScript(JavaScript)便是一個(gè)動(dòng)態(tài)語(yǔ)言。除此之外如Ruby、Python等也都屬于動(dòng)態(tài)語(yǔ)言,而CC++等語(yǔ)言則不屬于動(dòng)態(tài)語(yǔ)言。

有三個(gè)名詞容易混淆:
·Dynamic Programming Language (動(dòng)態(tài)語(yǔ)言或動(dòng)態(tài)編程語(yǔ)言)
·Dynamically Typed Language   (動(dòng)態(tài)類(lèi)型語(yǔ)言)
·Statically Typed Language    (靜態(tài)類(lèi)型語(yǔ)言)

所謂的動(dòng)態(tài)類(lèi)型語(yǔ)言,意思就是類(lèi)型的檢查是在運(yùn)行時(shí)做的。

② 靜態(tài)類(lèi)型

而靜態(tài)類(lèi)型語(yǔ)言的類(lèi)型判斷是在運(yùn)行前判斷(如編譯階段),比如C#Java就是靜態(tài)類(lèi)型語(yǔ)言,靜態(tài)類(lèi)型語(yǔ)言為了達(dá)到多態(tài)會(huì)采取一些類(lèi)型鑒別手段,如繼承、接口,而動(dòng)態(tài)類(lèi)型語(yǔ)言卻不需要,所以一般動(dòng)態(tài)語(yǔ)言都會(huì)采用dynamic typing,常出現(xiàn)于腳本語(yǔ)言中.需要明確說(shuō)明一點(diǎn),那就是,是不是動(dòng)態(tài)類(lèi)型語(yǔ)言與這門(mén)語(yǔ)言是不是類(lèi)型安全的完全不相干的,不要將它們聯(lián)系在一起!
優(yōu)缺點(diǎn):
靜態(tài)類(lèi)型語(yǔ)言的主要優(yōu)點(diǎn)在于其結(jié)構(gòu)非常規(guī)范,便于調(diào)試,方便類(lèi)型安全;缺點(diǎn)是為此需要寫(xiě)更多的類(lèi)型相關(guān)代碼,導(dǎo)致不便于閱讀、不清晰明了。動(dòng)態(tài)類(lèi)型語(yǔ)言的優(yōu)點(diǎn)在于方便閱讀,不需要寫(xiě)非常多的類(lèi)型相關(guān)的代碼;缺點(diǎn)自然就是不方便調(diào)試,命名不規(guī)范時(shí)會(huì)造成讀不懂,不利于理解等。

③ Objective-C的動(dòng)態(tài)運(yùn)行性

objective-c語(yǔ)言是C語(yǔ)言的一個(gè)子類(lèi),所以Objective-C是一個(gè)靜態(tài)語(yǔ)言,但是Objective-C的三大特性之一的多態(tài)性讓其擁有了動(dòng)態(tài)性。
oc的動(dòng)態(tài)性讓程序可以在運(yùn)行時(shí)判斷其該有的行為,而不是像c等靜態(tài)語(yǔ)言一樣在編譯構(gòu)建時(shí)就確定下來(lái)。它的動(dòng)態(tài)性主要體現(xiàn)在一下三個(gè)方面:

動(dòng)態(tài)類(lèi)型

如id類(lèi)型。實(shí)際上靜態(tài)類(lèi)型因?yàn)槠涔潭ㄐ院涂深A(yù)知性而使用得更加廣泛。靜態(tài)類(lèi)型是強(qiáng)類(lèi)型,而動(dòng)態(tài)類(lèi)型屬于弱類(lèi)型。運(yùn)行時(shí)決定接收者。
這里補(bǔ)充講一下強(qiáng)、弱類(lèi)型:語(yǔ)言有無(wú)類(lèi)型、強(qiáng)類(lèi)型和弱類(lèi)型三種。無(wú)類(lèi)型的不做任何檢查,甚至不區(qū)分指令和數(shù)據(jù);弱類(lèi)型的檢查很弱,僅能區(qū)分指令和數(shù)據(jù);強(qiáng)類(lèi)型的嚴(yán)格在編譯期進(jìn)行檢查。強(qiáng)類(lèi)型語(yǔ)言在沒(méi)有強(qiáng)制類(lèi)型轉(zhuǎn)化前,不允許兩種不同類(lèi)型的變量相互操作

動(dòng)態(tài)綁定

讓代碼在運(yùn)行時(shí)判斷需要調(diào)用什么方法,而不是在編譯時(shí)。與其他面向?qū)ο笳Z(yǔ)言一樣,方法調(diào)用和代碼并沒(méi)有在編譯時(shí)連接在一起,而是在消息發(fā)送時(shí)才進(jìn)行連接。運(yùn)行時(shí)決定調(diào)用哪個(gè)方法。

動(dòng)態(tài)載入

讓程序在運(yùn)行時(shí)添加代碼模塊以及其他資源。用戶(hù)可以根據(jù)需要加載一些可執(zhí)行代碼和資源,而不是在啟動(dòng)時(shí)就加載所有組件。可執(zhí)行代碼中可以含有和程序運(yùn)行時(shí)整合的新類(lèi)。
對(duì)象是運(yùn)行時(shí)類(lèi)的一個(gè)實(shí)例。在類(lèi)里聲明了的實(shí)例變量和方法,它的每個(gè)實(shí)例都在內(nèi)存中擁有同樣的實(shí)例變量,以及指向那些方法的指針。在oc中對(duì)象永遠(yuǎn)是通過(guò)指針來(lái)引用的。

2.講一下MVC和MVVM,MVP?

① 、MVC

MVC模式的意思是,軟件可以分成三個(gè)部分。

MVC.png
視圖(View):用戶(hù)界面。
控制器(Controller):業(yè)務(wù)邏輯
模型(Model):數(shù)據(jù)保存

各部分之間的通信方式如下。


image.png
1.View 傳送指令到 Controller
2.Controller 完成業(yè)務(wù)邏輯后,要求 Model 改變狀態(tài)
3.Model 將新的數(shù)據(jù)發(fā)送到 View,用戶(hù)得到反饋

所有通信都是單向的。

② 、MVP

MVP 模式將 Controller 改名為 Presenter,同時(shí)改變了通信方向。


MVP.png
1. 各部分之間的通信,都是雙向的。
2. View 與 Model 不發(fā)生聯(lián)系,都通過(guò) Presenter 傳遞。
3. View 非常薄,不部署任何業(yè)務(wù)邏輯,稱(chēng)為"被動(dòng)視圖"(Passive View),即沒(méi)有任何主動(dòng)性,而 Presenter非常厚,所有邏輯都部署在那里。

③ 、MVVM

MVVM 模式將 Presenter 改名為 ViewModel,基本上與 MVP 模式完全一致。

MVVM.png

唯一的區(qū)別是,它采用雙向綁定(data-binding):View的變動(dòng),自動(dòng)反映在 ViewModel,反之亦然。AngularEmber 都采用這種模式。

3.為什么代理要用weak?代理的delegate和dataSource有什么區(qū)別?block和代理的區(qū)別?

為什么代理要用weak

防止循環(huán)引用。例如View有一個(gè)協(xié)議,需要一個(gè)代理實(shí)現(xiàn)回調(diào)。一個(gè)Controller添加這個(gè)View,并且遵守協(xié)議,成為View的代理。如果不用week,用strong,Controller ->View -> delegate -> Controller,就循環(huán)引用了。

代理屬性都用weak或是assign修飾, 現(xiàn)整理下weak(assign)strong(retain)修飾區(qū)別:

@property (nonatomic, weak) id delegate;
weak:指明該對(duì)象并不負(fù)責(zé)保持delegate這個(gè)對(duì)象,delegate這個(gè)對(duì)象的銷(xiāo)毀由外部控制。

@property (nonatomic, strong) id delegate;
strong:該對(duì)象強(qiáng)引用delegate,外界不能銷(xiāo)毀delegate對(duì)象,會(huì)導(dǎo)致循環(huán)引用(Retain MainVC)。

Datasource和Delegate兩者的區(qū)別:

Datasource 是在告訴使用者之前的view中都有什么東西,有什么屬性啊,屬性的值都是多少,是只關(guān)于數(shù)據(jù)的東西。
Delegate 是在告訴使用者之前的view有什么方法可以供我調(diào)用。
一個(gè)是數(shù)據(jù),一個(gè)是操作。

block和代理的區(qū)別:

blcok可以看一下這篇文章
首先兩者作用是一樣的,都是進(jìn)行單一回調(diào)。不同的是,delegate是個(gè)對(duì)象,然后用過(guò)一個(gè)對(duì)象自己調(diào)用代理協(xié)議函數(shù)來(lái)完成整個(gè)流程。block是傳遞一個(gè)函數(shù)指針,利用函數(shù)指針執(zhí)行來(lái)進(jìn)行回調(diào)。還有在內(nèi)存管理上需要注意,delegate不需要保存引用。block對(duì)引用數(shù)據(jù)有copy的處理。

4. 屬性的實(shí)質(zhì)是什么?包括哪幾個(gè)部分?屬性默認(rèn)的關(guān)鍵字都有哪些?@dynamic關(guān)鍵字和@synthesize關(guān)鍵字是用來(lái)做什么的?

@property 屬性的本質(zhì)

屬性的組成: @property = ivar + getter + setter;
實(shí)例變量+get方法+set方法,也就是說(shuō)使用@property系統(tǒng)會(huì)自動(dòng)生成settergetter方法;

屬性默認(rèn)的關(guān)鍵字

我們經(jīng)常使用assign,weak,strong,copy,nonatomic,atomic,readonly等關(guān)鍵字,下面我們列個(gè)表格去歸納一下屬性關(guān)鍵字具體作用:

image.png

@synthesize和@dynamic區(qū)別, 在聲明property屬性后,有2種實(shí)現(xiàn)選擇:

@dynamic關(guān)鍵字和@synthesize關(guān)鍵字

@synthesize

編譯器期間,讓編譯器自動(dòng)生成 getter/setter 方法。當(dāng)有自定義的存或取方法時(shí),自定義會(huì)屏蔽自動(dòng)生成該方法。

@dynamic

告訴編譯器,不自動(dòng)生成getter/setter方法,避免編譯期間產(chǎn)生警告,然后由自己實(shí)現(xiàn)存取方法。
或存取方法在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建綁定:主要使用在CoreData的實(shí)現(xiàn)NSManagedObject子類(lèi)時(shí)使用,由Core Data框架在程序運(yùn)行的時(shí)動(dòng)態(tài)生成子類(lèi)屬性。

5.屬性的默認(rèn)關(guān)鍵字是什么?

對(duì)于基本數(shù)據(jù)類(lèi)型默認(rèn)關(guān)鍵字是:atomic,readwrite,assign。
對(duì)于普通的OC對(duì)象:atomic,readwrite,strong

6.NSString為什么要用copy關(guān)鍵字,如果用strong會(huì)有什么問(wèn)題?

http://blog.csdn.net/huang512715681/article/details/73293357

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,667評(píng)論 30 472
  • 基礎(chǔ) 1. 為什么說(shuō)Objective-C是一門(mén)動(dòng)態(tài)的語(yǔ)言? 2. 講一下MVC和MVVM,MVP? 3. 為...
    波妞和醬豆子閱讀 3,558評(píng)論 0 46
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛(ài)閱讀 2,255評(píng)論 0 7
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場(chǎng)景。SDWebImage的原...
    LZM輪回閱讀 2,133評(píng)論 0 12
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,580評(píng)論 0 35

友情鏈接更多精彩內(nèi)容