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ù)顯示在屏幕上。
MVVM全名是Model View View-Model栖博,ViewModel將表示邏輯從 Controller 移出放到一個新的對象里屑宠,即 View Model。就是那些將 Model 數(shù)據(jù)轉(zhuǎn)換為 View 可以呈現(xiàn)的東西的事情仇让,例如將一個 NSDate 轉(zhuǎn)換為一個格式化過的 NSString典奉。
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)用程序的后端程序工作雹舀。
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ū)別?
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)線程安全
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的幾點巩割?
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)