2019 iOS面試資料

1蕴轨、我們說的Objective-C是動態(tài)運行時語言是什么意思?

答:oc類的類型和數(shù)據(jù)變量的類型都是在運行時確定的痴鳄,而不是在編譯時確定的昆著,所以說oc是動態(tài)語言县貌。

它主要表現(xiàn)在三個方面:

1、動態(tài)類型:

即運行時再決定對象的類型凑懂。比如id類型煤痕,任何對象都可以被id指針?biāo)福挥性谶\行時才能決定是什么類型。像內(nèi)置的明確的基本類型都屬于靜態(tài)類型(int摆碉、NSString等)塘匣。靜態(tài)類型在編 譯的時候就能被識別出來。所以巷帝,若程序發(fā)生了類型不對應(yīng)忌卤,編譯器就會發(fā)出警告。而動態(tài)類型就編譯器編譯的時候是不能被識別的楞泼,要等到運行時(run time)驰徊,即程序運行的時候才會根據(jù)語境來識別。

2.動態(tài)綁定:

基于動態(tài)類型堕阔,在某個實例對象被確定后棍厂,其類型便被確定了。該對象對應(yīng)的屬性和響應(yīng)的消息也被完全確定超陆,也就是說讓代碼在運行時判斷需要調(diào)用什么方法牺弹,而不是在編譯時,這就是動態(tài)綁定时呀。比如我們一般向一個NSObject對象發(fā)送-respondsToSelector:或者 -instancesRespondToSelector:等來確定對象是否可以對某個SEL做出響應(yīng)张漂,而在OC消息轉(zhuǎn)發(fā)機(jī)制被觸發(fā)之前,對應(yīng)的類 的+resolveClassMethod:和+resolveInstanceMethod:將會被調(diào)用谨娜,在此時有機(jī)會動態(tài)地向類或者實例添加新的方 法航攒,也即類的實現(xiàn)是可以動態(tài)綁定的;isKindOfClass也是一樣的道理瞧预。

3.動態(tài)加載:

根據(jù)需求加載所需要的資源屎债,這點很容易理解,對于iOS開發(fā)來說垢油,基本就是根據(jù)不同的機(jī)型做適配。最經(jīng)典的例子就是在Retina設(shè)備上加載@2x的圖片圆丹,而在老一些的普通屏設(shè)備上加載原圖

2滩愁、講一下MVC和MVVM,MVP辫封?

MVC全名是Model View Controller硝枉,是模型(model)-視圖(view)-控制器(controller)的縮寫,Model 呈現(xiàn)數(shù)據(jù),View 呈現(xiàn)用戶界面倦微,而 View Controller 調(diào)節(jié)它兩者之間的交互妻味。

視圖(View):構(gòu)建UI的類;例如:按鈕欣福,標(biāo)簽责球,進(jìn)度條等。

模型(Model):視圖類所需要的數(shù)據(jù);例如:表格需要顯示的文字雏逾。

控制器(Controller):連接視圖類和模型類嘉裤,任務(wù)是使數(shù)據(jù)顯示在屏幕上。


MVC

MVVM全名是Model View View-Model栖博,ViewModel將表示邏輯從 Controller 移出放到一個新的對象里屑宠,即 View Model。就是那些將 Model 數(shù)據(jù)轉(zhuǎn)換為 View 可以呈現(xiàn)的東西的事情仇让,例如將一個 NSDate 轉(zhuǎn)換為一個格式化過的 NSString典奉。


MVVM

MVP全名是Model-view-presenter,是使用者界面設(shè)計模式的一種丧叽。

Model 定義使用者界面所需要被顯示的數(shù)據(jù)模型卫玖,一個模型包含著相關(guān)的業(yè)務(wù)邏輯。

View 視圖為呈現(xiàn)使用者界面的終端蠢正,用以表現(xiàn)來自 Model 的數(shù)據(jù)骇笔,和使用者命令路由再經(jīng)過 Presenter 對事件處理后的數(shù)據(jù)。

Presenter 包含著元件的事件處理嚣崭,負(fù)責(zé)檢索 Model 取得數(shù)據(jù)笨触,和將取得的數(shù)據(jù)經(jīng)過格式轉(zhuǎn)換與 View 進(jìn)行溝通。

MVP 設(shè)計模式通常會再加上 Controller 做為整體應(yīng)用程序的后端程序工作雹舀。

MVP

3芦劣、為什么代理要用weak?代理的delegate和dataSource有什么區(qū)別说榆?block和代理的區(qū)別?

1)為什么代理要用weak虚吟?

?? 防止循環(huán)引用。例如View有一個協(xié)議签财,需要一個代理實現(xiàn)回調(diào)串慰。一個Controller添加這個View,并且遵守協(xié)議唱蒸,成為View的代理邦鲫。如果不用week,用strong神汹,Controller ->View -> delegate -> Controller庆捺,就循環(huán)引用了。

2)代理的delegate和dataSource有什么區(qū)別屁魏?

?? delegate偏重于與用戶交互的回調(diào)滔以,有那些方法可以供我使用,例如UITableviewDelegate氓拼;dataSource偏重于數(shù)據(jù)的回調(diào)你画,view里面有什么東西抵碟,屬性都是什么,例如UITableviewDatasource撬即;

3) block和代理的區(qū)別?

block和delegate的區(qū)別

4立磁、屬性的實質(zhì)是什么?包括哪幾個部分剥槐?屬性默認(rèn)的關(guān)鍵字都有哪些唱歧?@dynamic關(guān)鍵字和@synthesize關(guān)鍵字是用來做什么的?

1)屬性的實質(zhì)是什么粒竖?包括哪幾個部分

@property = ivar + getter + setter;

利用class_copyPropertyList 查看類的所有屬性

利用class_copyIvarList查看類的所有成員變量

利用class_copyMethodList查看類的所有方法

2)屬性默認(rèn)的關(guān)鍵字都有哪些颅崩?

iOS關(guān)于屬性關(guān)鍵字,你又知道多少蕊苗?

3) @dynamic關(guān)鍵字

@dynamic告訴編譯器,屬性的setter與getter方法由用戶自己實現(xiàn)沿后。

4) @synthesize關(guān)鍵字

@synthesize的語義是如果你沒有手動實現(xiàn)setter方法和getter方法,那么編譯器會自動為你加上這兩個方法朽砰。

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

readwrite瞧柔、nonatomic漆弄、strong

6、NSString為什么要用copy關(guān)鍵字造锅,如果用strong會有什么問題撼唾?(注意:這里沒有說用strong就一定不行。使用copy和strong是看情況而定的)

1) 因為父類指針可以指向子類對象,使用copy的目的是為了讓本對象的屬性不受外界影響,使用copy無論給我傳入是一個可變對象還是不可對象,我本身持有的就是一個不可變的副本.

2)如果我們使用是strong,那么這個屬性就有可能指向一個可變對象,如果這個可變對象在外部被修改了,那么會影響該屬性.

7哥蔚、如何令自己所寫的對象具有拷貝功能?

答:若想令自己所寫的對象具有拷貝功能倒谷,則需實現(xiàn) NSCopying 協(xié)議。如果自定義的對象分為可變版本與不可變版本糙箍,那么就要同時實現(xiàn) NSCopying與 NSMutableCopying協(xié)議渤愁。

具體步驟:

需聲明該類遵從 NSCopying 協(xié)議

實現(xiàn) NSCopying 協(xié)議。該協(xié)議只有一個方法:

- (id)copyWithZone:(NSZone*)zone;

8深夯、簡述kvo猴伶、kvc、Delegate他們之間的區(qū)別塌西?

簡述NotificationCenter,KVC,KVO,delegate,并說明他們之間的區(qū)別

9、include與#import的區(qū)別筝尾?#import與@class的區(qū)別捡需?

1)兩者的區(qū)別是:#include與#import的效果相同,只是后者不會引起交叉編譯筹淫,確保頭文件只會被導(dǎo)入一次站辉。

2)#import與@class的卻別是:#import會包含這個類的所有信息呢撞,包括實體變量和方法,而@class只是告訴編譯器饰剥,其后面聲明的名稱是類的名稱殊霞,至于這些類是如何定義的,暫時不用考慮汰蓉。使用#import編譯效果高绷蹲,防止相互包含的編譯錯誤。

10顾孽、nonatomic和atomic的區(qū)別祝钢?atomic是絕對的線程安全么?為什么若厚?如果不是拦英,那應(yīng)該如何實現(xiàn)?

1)nonatomic和atomic的區(qū)別

nonatomic和atomic用來決定編譯器生成的getter和setter操作是否為原子操作测秸。

2)atomic是絕對的線程安全么疤估?

atomic不是絕對的線程安全。atomic的本意是指屬性的存取方法是線程安全的霎冯,并不保證整個對象是線程安全的铃拇。如:

聲明一個NSMutableArray的原子屬性stuff,此時self.stuff 和 self.stuff = otherstuff都是線程安全的肃晚。但是使用[self.stuff objectAtIndex:index]就不是線程安全的锚贱。需要用互斥鎖來保證線程安全性。

3.)如何實現(xiàn)線程安全

iOS中保證線程安全的幾種方式與性能對比

11关串、Objective-C與C拧廊、C+++之間的聯(lián)系和區(qū)別?

C語言的特點:

1)C語言是結(jié)構(gòu)化語言晋修,層次清晰吧碾,調(diào)試和維護(hù)比較容易

2)表現(xiàn)能力和處理能力比較強(qiáng),可直接訪問內(nèi)存的物理地址

3)c語言實現(xiàn)對硬件的編輯墓卦,c語言課用語系統(tǒng)軟件的開發(fā)倦春,也可用語應(yīng)用軟件的開發(fā),是集高級語言和低級語言的功能一體落剪。

4)C語言效率高睁本,可移植性強(qiáng)。

C++語言特點:

1)在C語言的基礎(chǔ)上進(jìn)行擴(kuò)充和完善忠怖,使C++兼容了C語言的面向過程特點呢堰,又成為了一種面向?qū)ο蟮某绦蛟O(shè)計語言;

2)可以使用抽象數(shù)據(jù)類型進(jìn)行基于對象的編程凡泣;

3)可以使用多繼承枉疼、多態(tài)進(jìn)行面向?qū)ο蟮木幊蹋?/p>

4)可以擔(dān)負(fù)起以模版為特征的泛型化編程皮假。

OC的特點:

2)Objective-C,擴(kuò)展了C 語言使它具備面向?qū)ο笤O(shè)計的能力骂维,例如類惹资、消息、繼承航闺;同時在Objective-C的代碼中可以有C和C++語句褪测,它可以調(diào)用C的函數(shù),也可以通過C++對象訪問方法来颤;

3)Objective-C可以實現(xiàn)底層系統(tǒng)編程汰扭,另一方面可以支持利用動態(tài)架構(gòu)進(jìn)行開發(fā)。

OC與C語言的區(qū)別

OC里中兼容C語言的語法可以兩者混合編碼福铅。 OC是面向?qū)ο蟮?有類,對象的概念萝毛,C語言沒有

C是面向過程的語言

OC的和C++的區(qū)別:

1)繼承:Objective-C與不支持多重繼承,而C++語言支持多重繼承(從側(cè)面可以說明多重繼承的效率不高)滑黔;

2)函數(shù)調(diào)用:Objective-C通過互相傳遞消息實現(xiàn)函數(shù)調(diào)用笆包,而C++直接進(jìn)行函數(shù)調(diào)用

3)定型:Objective-C是動態(tài)定型。所以它的類庫比C++要容易操作略荡。Objective-C 在運行時可以允許根據(jù)字符串名字來訪問方法和類庵佣,還可以動態(tài)連接和添加類。而C++汛兜,對象的靜態(tài)類型決定你是否可以發(fā)送消息給它巴粪。

4)接口:Objective-C采用protocol協(xié)議(非正式和正式)的形式來定義接口,而C++采用虛函數(shù)的形式來定義接口粥谬。

5)方法重載:c++中允許兩個方法的名字相同肛根,參數(shù)個數(shù)相同,但是參數(shù)類型不同漏策,以及不同的返回值類型派哲。而OC中不允許同一個類中兩個方法有相同的名字,參數(shù)個數(shù)相同掺喻,參數(shù)類型不同芭届。

鏈接:http://www.reibang.com/p/0417d5c01380

12、UICollectionView自定義layout如何實現(xiàn)感耙?

其實可以分三個步驟:

1)覆寫prepareLayout方法褂乍,并在里面事先就計算好必要的布局信息并存儲起來。

2)基于prepareLayout方法中的布局信息即硼,使用collectionViewContentSize方法返回UICollectionView的內(nèi)容尺寸树叽。

3)使用layoutAttributesForElementsInRect:方法返回指定區(qū)域cell、Supplementary View和Decoration View的布局屬性谦絮。

13题诵、進(jìn)程和線程的區(qū)別?同步異步的區(qū)別层皱?并行和并發(fā)的區(qū)別性锭?

一、線程與進(jìn)程的區(qū)別

進(jìn)程:指內(nèi)存中所運行的程序

線程:進(jìn)程中的一個執(zhí)行流

區(qū)別:

1叫胖、一個程序至少有一個進(jìn)程(當(dāng)然也可以啟動多個進(jìn)程)草冈,而一個進(jìn)程至少有一個線程(當(dāng)然也可以多個線程同時運行,如果支持的話)

2瓮增、另外怎棱,內(nèi)存中的每一個進(jìn)程都是有獨立內(nèi)存單元的(進(jìn)程是可以申請系統(tǒng)資源的),而其中的多個線程是可以共享內(nèi)存的(共享其所在進(jìn)程的資源)绷跑,可以提高程序運行效率

3拳恋、進(jìn)程是一個“執(zhí)行中的程序”。

4砸捏、子進(jìn)程和父進(jìn)程具有不同的代碼和數(shù)據(jù)空間谬运,而多個線程則是共享數(shù)據(jù)空間。多線程是為了節(jié)約CPU時間垦藏,充分發(fā)揮系統(tǒng)的“空閑時間”梆暖。

二、并發(fā)與并行的區(qū)別

并發(fā):指一個時間段中幾個程序都處于已啟動到運行完畢之間掂骏。(可能現(xiàn)在并沒有在工作)轰驳,且這幾個程序都是在同一個處理機(jī)上運行。

并行:并行是針對多處理器而言的(當(dāng)然弟灼,單處理器也可以表現(xiàn)出并行的狀態(tài)级解,主要表現(xiàn)為進(jìn)程被交替執(zhí)行)。指同時發(fā)生多個并發(fā)事件(但是并發(fā)不一定并行袜爪,或者說并發(fā)事件之間不一定要同一時刻發(fā)生)蠕趁,主要表現(xiàn)為重疊執(zhí)行。

三辛馆、同步和異步

同步和異步是相對表現(xiàn)的俺陋,通俗點,同步就是順序執(zhí)行昙篙,執(zhí)行完當(dāng)前的任務(wù)再執(zhí)行下一個腊状,需要等待、協(xié)調(diào)運行苔可。而異步就是彼此獨立缴挖,多個任務(wù)之間不必要互相等待,只要CPU空閑焚辅,就可以同時執(zhí)行多個任務(wù)映屋,不需要等待其它任務(wù)的完成苟鸯。而我們平時所說的線程,就是實現(xiàn)異步的一個手段而已棚点。

原文:https://blog.csdn.net/lw1352617612/article/details/74157053

14早处、線程間通信?

線程間通信:在1個進(jìn)程中瘫析,線程往往不是孤立存在的砌梆,多個線程之間需要經(jīng)常進(jìn)行通信

線程間通信的體現(xiàn)

1個線程傳遞數(shù)據(jù)給另1個線程

在1個線程中執(zhí)行完特定任務(wù)后,轉(zhuǎn)到另1個線程繼續(xù)執(zhí)行任務(wù)


線程間通信常用方法

-?(void)performSelectorOnMainThread:(SEL)aSelector?withObject:(id)arg?waitUntilDone:(BOOL)wait;

-?(void)performSelector:(SEL)aSelector?onThread:(NSThread?*)thr?withObject:(id)arg?waitUntilDone:(BOOL)wait;

15贬循、GCD的一些常用的函數(shù)咸包?(group,barrier杖虾,信號量烂瘫,線程同步)

線程間通信示例?–?圖片下載

16、如何訪問并修改一個類的私有屬性亏掀?

答:KVC忱反,setvalue: forkey:方法修改

17、數(shù)據(jù)持久化的幾個方案(fmdb用沒用過)

我要永遠(yuǎn)地記住你B算怠(iOS中幾種數(shù)據(jù)持久化方案)

18温算、說一下AppDelegate的幾個方法?從后臺到前臺調(diào)用了哪些方法间影?第一次啟動調(diào)用了哪些方法注竿?從前臺到后臺調(diào)用了哪些方法?

1.點擊App圖標(biāo)(App沒有在后臺運行)

1)didFinishLaunchingWithOptions

2)applicationDidBecomeActive

2.從后臺到前臺

1)applicationWillEnterForeground

2)applicationDidBecomeActive

3.從前臺到后臺

1)applicationWillResignActive

2)applicationDidEnterBackground

4.通過URLScheme打開App

1.applicationWillEnterForeground

2.

- (BOOL)application:(UIApplication*)application? ? ? ? ? ? ? ? ? ??

????????????????openURL:(NSURL*)url??

? ? ? ? ? ? ?sourceApplication:(NSString*)sourceApplication?

?? ? ? ? ? ? ? annotation:(id)annotation

??3.applicationDidBecomeActive


19魂贬、NSCache優(yōu)于NSDictionary的幾點巩割?

對NSCache的一些理解...

20、知不知道Designated Initializer付燥?使用它的時候有什么需要注意的問題宣谈?

我也不知道是啥

21、實現(xiàn)description方法能取到什么效果键科?

description基本概念

1.NSLog(@"%@", objectA);這會自動調(diào)用objectA的description方法來輸出ObjectA的描述信息.

2.description方法默認(rèn)返回對象的描述信息(默認(rèn)實現(xiàn)是返回類名和對象的內(nèi)存地址)

3.description方法是基類NSObject 所帶的方法,因為其默認(rèn)實現(xiàn)是返回類名和對象的內(nèi)存地址, 這樣的話,使用NSLog輸出OC對象,意義就不是很大,因為我們并不關(guān)心對象的內(nèi)存地址,比較關(guān)心的是對象內(nèi)部的一些成變量的值闻丑。因此,會經(jīng)常重寫description方法,覆蓋description方法 的默認(rèn)實現(xiàn)

description重寫的方法

/**對象方法:當(dāng)使用NSLog輸出該類的實例對象的時候調(diào)用*/

-(NSString *) description

{

return [NSString stringWithFormat:@"狗腿數(shù):%d,狗眼數(shù)%d\n",_legNum,_eyeNum];

}

/**類方法:當(dāng)使用NSLog輸出該類的類對象的時候調(diào)用*/

+(NSString *) description

{

return @"+開頭的description方法";

}

description陷阱

1.千萬不要在description方法中同時使用%@和self,下面的寫法是錯誤的

- (NSString *)description {

return [NSString stringWithFormat:@"%@", self];

}

2.同時使用了%@和self,代表要調(diào)用self的description方法,因此最終會導(dǎo)致程序陷入死循環(huán),循 環(huán)調(diào)用description方法

3.當(dāng)[NSString stringWithFormat:@“%@”, self]; 使用它時,循壞調(diào)用勋颖,導(dǎo)致系統(tǒng)會發(fā)生運行時錯誤嗦嗡。

4.當(dāng)該方法使用NSLog(“%@”,self) 時候, 系統(tǒng)做了相關(guān)的優(yōu)化,循壞調(diào)用3次后就會自動退出


22饭玲、objc使用什么機(jī)制管理對象內(nèi)存侥祭?

MRC(手動管理內(nèi)存)、ARC(自動管理內(nèi)存)

中級Block

1、block的實質(zhì)是什么矮冬?一共有幾種block谈宛?都是什么情況下生成的?

A:block對象就是一個結(jié)構(gòu)體欢伏,里面有isa指針指向自己的類(global malloc stack)入挣,有desc結(jié)構(gòu)體描述block的信息,__forwarding指向自己或堆上自己的地址硝拧,如果block對象截獲變量,這些變量也會出現(xiàn)在block結(jié)構(gòu)體中葛假。最重要的block結(jié)構(gòu)體有一個函數(shù)指針障陶,指向block代碼塊。block結(jié)構(gòu)體的構(gòu)造函數(shù)的參數(shù)聊训,包括函數(shù)指針抱究,描述block的結(jié)構(gòu)體,自動截獲的變量(全局變量不用截獲)带斑,引用到的__block變量鼓寺。(__block對象也會轉(zhuǎn)變成結(jié)構(gòu)體)

block代碼塊在編譯的時候會生成一個函數(shù),函數(shù)第一個參數(shù)是前面說到的block對象結(jié)構(gòu)體指針勋磕。執(zhí)行block妈候,相當(dāng)于執(zhí)行block里面__forwarding里面的函數(shù)指針。

2挂滓、使用系統(tǒng)的某些block api苦银,是否考慮引用循環(huán)問題?

使用系統(tǒng)的某些block api(如UIView的block版本寫動畫時)赶站,是否也考慮引用循環(huán)問題幔虏?...

3、談?wù)刡lock的理解贝椿?并寫出一個使用block執(zhí)行UIVew動畫想括?

Block是可以獲取其他函數(shù)局部變量的匿名函數(shù),其不但方便開發(fā)烙博,并且可以大幅提高應(yīng)用的執(zhí)行效率(多核心CPU可直接處理Block指令)

[UIView?transitionWithView:self.view??

??????????????????duration:0.2??

???????????????????options:UIViewAnimationOptionTransitionFlipFromLeft??

????????????????animations:^{?[[blueViewController?view]?removeFromSuperview];?[[self?view]?insertSubview:yellowViewController.view?atIndex:0];?}??

completion:NULL];?

Runtime

1瑟蜈、runtime如何實現(xiàn)weak屬性?

1)要實現(xiàn) weak 屬性习勤,首先要搞清楚 weak 屬性的特點:

weak 此特質(zhì)表明該屬性定義了一種“非擁有關(guān)系” (nonowning relationship)踪栋。為這種屬性設(shè)置新值時,設(shè)置方法既不保留新值图毕,也不釋放舊值夷都。此特質(zhì)同 assign 類似, 然而在屬性所指的對象遭到摧毀時,屬性值也會清空(nil out)囤官。

2)那么 runtime 如何實現(xiàn) weak 變量的自動置nil冬阳?

runtime 對注冊的類, 會進(jìn)行布局党饮,對于 weak 對象會放入一個 hash 表中肝陪。 用 weak 指向的對象內(nèi)存地址作為 key,當(dāng)此對象的引用計數(shù)為0的時候會 dealloc刑顺,假如 weak 指向的對象內(nèi)存地址是a氯窍,那么就會以a為鍵, 在這個 weak 表中搜索蹲堂,找到所有以a為鍵的 weak 對象狼讨,從而設(shè)置為 nil。

2柒竞、runtime如何通過selector找到對應(yīng)的IMP地址政供?

每一個類對象中都一個對象方法列表(對象方法緩存)

1)類方法列表是存放在類對象中isa指針指向的元類對象中(類方法緩存)

2)方法列表中每個方法結(jié)構(gòu)體中記錄著方法的名稱,方法實現(xiàn),以及參數(shù)類型,其實selector本質(zhì)就是方法名稱,通過這個方法名稱就可以在方法列表中找到對應(yīng)的方法實現(xiàn).

3)當(dāng)我們發(fā)送一個消息給一個NSObject對象時朽基,這條消息會在對象的類對象方法列表里查找

4)當(dāng)我們發(fā)送一個消息給一個類時布隔,這條消息會在類的Meta Class對象的方法列表里查找

3、能否向編譯后得到的類中增加實例變量稼虎?能否向運行時創(chuàng)建的類中添加實例變量衅檀?為什么?

不能向編譯后得到的類中增加實例變量渡蜻;

能向運行時創(chuàng)建的類中添加實例變量术吝;

原因如下:

因為編譯后的類已經(jīng)注冊在 runtime 中,類結(jié)構(gòu)體中的 objc_ivar_list 實例變量的鏈表 和 instance_size 實例變量的內(nèi)存大小已經(jīng)確定茸苇,同時runtime 會調(diào)用 class_setIvarLayout 或 class_setWeakIvarLayout 來處理 strong weak 引用排苍。所以不能向存在的類中添加實例變量;

運行時創(chuàng)建的類是可以添加實例變量学密,調(diào)用 class_addIvar 函數(shù)淘衙。但是得在調(diào)用 objc_allocateClassPair 之后,objc_registerClassPair 之前腻暮,原因同上彤守。

4、runtime如何實現(xiàn)weak變量的自動置nil哭靖?

5具垫、在開發(fā)中如何使用runtime?什么應(yīng)用場景试幽?

在開發(fā)中如何使用runtime筝蚕?什么應(yīng)用場景?

類結(jié)構(gòu)

1、isa指針起宽?(對象的isa洲胖,類對象的isa,元類的isa都要說)

2坯沪、類方法和實例方法有什么區(qū)別绿映?

3、介紹一下分類腐晾,能用分類做什么叉弦?內(nèi)部是如何實現(xiàn)的?它為什么會覆蓋掉原來的方法藻糖?

4卸奉、運行時能增加成員變量么?能增加屬性么颖御?如果能,如何增加凝颇?如果不能潘拱,為什么?

5拧略、objc中向一個nil對象發(fā)送消息將會發(fā)生什么芦岂?(返回值是對象,是標(biāo)量垫蛆,結(jié)構(gòu)體)

高級

1禽最、UITableview的優(yōu)化方法(緩存高度,異步繪制袱饭,減少層級川无,hide,避免離屏渲染)

2虑乖、有沒有用過運行時懦趋,用它都能做什么?(交換方法疹味,創(chuàng)建類仅叫,給新創(chuàng)建的類增加方法,改變isa指針)

3糙捺、看過哪些第三方框架的源碼诫咱?都是如何實現(xiàn)的?(如果沒有洪灯,問一下多圖下載的設(shè)計)

4坎缭、SDWebImage的緩存策略?

5、AFN為什么添加一條常駐線程幻锁?

6凯亮、KVO的使用?實現(xiàn)原理哄尔?(為什么要創(chuàng)建子類來實現(xiàn))

7假消、KVC的使用?實現(xiàn)原理岭接?(KVC拿到key以后富拗,是如何賦值的?知不知道集合操作符鸣戴,能不能訪問私有屬性啃沪,能不能直接訪問_ivar)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窄锅,隨后出現(xiàn)的幾起案子创千,更是在濱河造成了極大的恐慌,老刑警劉巖入偷,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件追驴,死亡現(xiàn)場離奇詭異,居然都是意外死亡疏之,警方通過查閱死者的電腦和手機(jī)殿雪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锋爪,“玉大人丙曙,你說我怎么就攤上這事∑浣荆” “怎么了亏镰?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長年栓。 經(jīng)常有香客問我拆挥,道長,這世上最難降的妖魔是什么某抓? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任纸兔,我火速辦了婚禮,結(jié)果婚禮上否副,老公的妹妹穿的比我還像新娘汉矿。我一直安慰自己,他們只是感情好备禀,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布洲拇。 她就那樣靜靜地躺著奈揍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赋续。 梳的紋絲不亂的頭發(fā)上男翰,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音纽乱,去河邊找鬼蛾绎。 笑死,一個胖子當(dāng)著我的面吹牛鸦列,可吹牛的內(nèi)容都是我干的租冠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼薯嗤,長吁一口氣:“原來是場噩夢啊……” “哼顽爹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骆姐,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤镜粤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玻褪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體繁仁,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年归园,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稚矿。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡庸诱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晤揣,到底是詐尸還是另有隱情桥爽,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布昧识,位于F島的核電站钠四,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跪楞。R本人自食惡果不足惜缀去,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甸祭。 院中可真熱鬧缕碎,春花似錦、人聲如沸池户。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茸俭,卻和暖如春的猛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氛雪。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工房匆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人注暗。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓坛缕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捆昏。 傳聞我的和親對象是個殘疾皇子赚楚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,113評論 1 32
  • 1.設(shè)計模式是什么宠页? 你知道哪些設(shè)計模式,并簡要敘述寇仓?設(shè)計模式是一種編碼經(jīng)驗举户,就是用比較成熟的邏輯去處理某一種類型...
    龍飝閱讀 2,165評論 0 12
  • 基礎(chǔ) 1. 為什么說Objective-C是一門動態(tài)的語言? 2. 講一下MVC和MVVM遍烦,MVP俭嘁? 3. 為...
    波妞和醬豆子閱讀 3,330評論 0 46
  • 1.設(shè)計模式是什么? 你知道哪些設(shè)計模式服猪,并簡要敘述供填? 設(shè)計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去處理某一種類...
    司馬DE晴空閱讀 1,300評論 0 7
  • 今天罢猪,處于不想說狀態(tài)近她。 最近很多想做的事情,可膳帕,一想起粘捎,要做這個,要做那個危彩,就完全提不起精神做任何事情攒磨,甚至連找個...
    辛佳璐Lucy閱讀 327評論 0 0