1、設(shè)計模式是什么冕杠? 你知道哪些設(shè)計模式微姊,并簡要敘述?
設(shè)計模式是一種編碼經(jīng)驗拌汇,就是用比較成熟的邏輯去處理某一種類型的事情柒桑。
1). MVC模式:Model View Control,把模型 視圖 控制器 層進行解耦合編寫噪舀。
2). MVVM模式:Model View ViewModel 把模型 視圖 業(yè)務(wù)邏輯 層進行解耦和編寫魁淳。
3). 單例模式:通過static關(guān)鍵詞,聲明全局變量与倡。在整個進程運行期間只會被賦值一次界逛。4). 觀察者模式:KVO是典型的通知模式,觀察某個屬性的狀態(tài)纺座,狀態(tài)發(fā)生變化時通知觀察者息拜。
5). 委托模式:代理+協(xié)議的組合。實現(xiàn)1對1的反向傳值操作。
6). 工廠模式:通過一個類方法少欺,批量的根據(jù)已有模板生產(chǎn)對象喳瓣。
2、MVC 和 MVVM 的區(qū)別
1). MVVM是對胖模型進行的拆分赞别,其本質(zhì)是給控制器減負畏陕,將一些弱業(yè)務(wù)邏輯放到VM中去處理。
2). MVC是一切設(shè)計的基礎(chǔ)仿滔,所有新的設(shè)計模式都是基于MVC進行的改進惠毁。
3、#import跟 #include 有什么區(qū)別崎页,@class呢鞠绰,#import<> 跟 #import””有什么區(qū)別?
答:1).#import是Objective-C導(dǎo)入頭文件的關(guān)鍵字飒焦,#include是C/C++導(dǎo)入頭文件的關(guān)鍵字蜈膨,使用#import頭文件會自動只導(dǎo)入一次,不會重復(fù)導(dǎo)入荒给。
2).@class告訴編譯器某個類的聲明丈挟,當(dāng)執(zhí)行時,才去查看類的實現(xiàn)文件志电,可以解決頭文件的相互包含曙咽。
3).#import<>用來包含系統(tǒng)的頭文件,#import””用來包含用戶頭文件挑辆。
4例朱、frame 和 bounds 有什么不同?
1).frame指的是view在父視圖的大小和位置鱼蝉。
2).bounds指的是在本身坐標系統(tǒng)上的大小和位置洒嗤。
5、Objective-C的類可以多重繼承么魁亦?可以實現(xiàn)多個接口么渔隶?Category是什么?重寫一個類的方式用繼承好還是分類好洁奈?為什么间唉?
答:Objective-C的類不可以多重繼承;可以實現(xiàn)多個接口(協(xié)議)利术;Category是類別呈野;一般情況用分類好,用Category去重寫類的方法印叁,僅對本Category有效被冒,不會影響到其他類與原有類的關(guān)系军掂。
6、@property 的本質(zhì)是什么昨悼?ivar蝗锥、getter、setter 是如何生成并添加到這個類中的
@property的本質(zhì)是什么幔戏?@property= ivar +getter+setter;“屬性” (property)有兩大概念:ivar(實例變量)玛追、getter+setter(存取方法)“屬性” (property)作為 Objective-C 的一項特性,主要的作用就在于封裝對象中的數(shù)據(jù)闲延。 Objective-C 對象通常會把其所需要的數(shù)據(jù)保存為各種實例變量。實例變量一般通過“存取方法”(access method)來訪問韩玩。其中垒玲,“獲取方法” (getter)用于讀取變量值,而“設(shè)置方法” (setter)用于寫入變量值找颓。
7合愈、@property中有哪些屬性關(guān)鍵字?/ @property 后面可以有哪些修飾符击狮?
屬性可以擁有的特質(zhì)分為四類:
1.原子性---nonatomic特質(zhì)
2.讀/寫權(quán)限---readwrite(讀寫)佛析、readonly(只讀)
3.內(nèi)存管理語義---assign、strong彪蓬、weak寸莫、unsafe_unretained、copy
4.方法名---getter= 档冬、setter=
5.不常用的:nonnull,null_resettable,nullable
8膘茎、屬性關(guān)鍵字 readwrite,readonly酷誓,assign披坏,retain,copy盐数,nonatomic 各是什么作用棒拂,在那種情況下用?
1).readwrite是可讀可寫特性玫氢。需要生成getter方法和setter方法帚屉。
2).readonly是只讀特性。只會生成getter方法琐旁,不會生成setter方法涮阔,不希望屬性在類外改變。3).assign是賦值特性灰殴。setter方法將傳入?yún)?shù)賦值給實例變量;僅設(shè)置變量時,assign用于基本數(shù)據(jù)類型敬特。
4).retain(MRC)/strong(ARC) 表示持有特性掰邢。setter方法將傳入?yún)?shù)先保留,再賦值伟阔,傳入?yún)?shù)的retaincount會+1辣之。
5).copy表示拷貝特性。setter方法將傳入對象復(fù)制一份皱炉,需要完全一份新的變量時怀估。6).nonatomic非原子操作。決定編譯器生成的setter和getter方法是否是原子操作合搅,atomic表示多線程安全多搀,一般使用nonatomic,效率高灾部。