.1.數(shù)據(jù)的持久化:plist文件,對象歸檔,數(shù)據(jù)庫,coredata
2.KVO:鍵值觀察:是一種能使對象獲取其他對象變化通知機(jī)制
3.KVC:間接訪問對象實(shí)例變量,可以不通過存取方法訪問實(shí)例變量
4.淺復(fù)制(retain):并不拷貝對象本身,僅僅是拷貝指向?qū)ο蟮闹羔?/p>
5.深復(fù)制(copy):直接拷貝整個(gè)對象內(nèi)存到另一塊內(nèi)存中
【再簡單些說:淺復(fù)制就是指針拷貝;深復(fù)制就是內(nèi)容拷貝。】
在非集合類對象中(系統(tǒng)非集合類對象指的是 NSString, NSNumber ... 之類的對象):對immutable對象進(jìn)行copy操作,是指針復(fù)制,mutableCopy操作時(shí)內(nèi)容復(fù)制;對mutable對象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制。用代碼簡單表示如下:
[immutableObject copy] // 淺復(fù)制
[immutableObject mutableCopy] //深復(fù)制
[mutableObject copy] //深復(fù)制
[mutableObject mutableCopy] //深復(fù)制
在集合類對象中(集合類對象是指NSArray、NSDictionary、NSSet ... 之類的對象),對immutable對象進(jìn)行copy,是指針復(fù)制,mutableCopy是內(nèi)容復(fù)制;對mutable對象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制。但是:集合對象的內(nèi)容復(fù)制僅限于對象本身,對象元素仍然是指針復(fù)制。用代碼簡單表示如下:
[immutableObject copy] // 淺復(fù)制
[immutableObject mutableCopy] //單層深復(fù)制
[mutableObject copy] //單層深復(fù)制
[mutableObject mutableCopy] //單層深復(fù)制
6.對MVC的理解:
M:(model) ? 數(shù)據(jù)模型--》存儲 定義 操作數(shù)據(jù)
V:(view) ? ? ? 表示視圖--》用戶操作交互
C: (Controller) ?控制器--》獲取數(shù)據(jù) 顯示在表示視圖上面
7.一個(gè)APP中有一個(gè)button,在手觸摸屏幕點(diǎn)擊后,到button收到點(diǎn)擊事件,中間發(fā)生過程?【從響應(yīng)者鏈來說】
1.設(shè)備將touch到的UITouch和UIEvent對象打包,放到當(dāng)前活動的Application事件隊(duì)列中 ? ?
2.單例的UIApplication會從事件隊(duì)列中取出觸摸事件并傳遞給單例UIWindow ? ?
3.UIWindow調(diào)用方法查找touch操作的所在視圖view
8.UIResponder 是 UIView的 父類 ? UIView 是 UIControl的父類
9.為什么實(shí)用copy申明NSString,若用Strong會有什么問題?
父類可接受子類對象(NSString是NSMUtableString的父類),實(shí)用copy是為了不受外界影響,無論是可變還是不可變,保證本身持有一個(gè)不可變副本 ? ? ?如果使用strong 那么屬性有可能指向一個(gè)可變對象,如果這個(gè)可變對象被外部修改了,那么影響該屬性
10.進(jìn)程 線程 區(qū)別 聯(lián)系
區(qū)別:一個(gè)線程只能屬于一個(gè)進(jìn)程,線程是操作系統(tǒng)識別的最小執(zhí)行和調(diào)度單位。
? ? ? ? ? ?一個(gè)進(jìn)程可以有很多個(gè)線程,但至少有一個(gè)線程。
? ? ? ? ? ? ?資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源。 同一進(jìn)程中的多個(gè)線程 ? ? ? ? ? ? 共享代碼段(代碼和常量),數(shù)據(jù)段(全局變量和靜態(tài)變量),擴(kuò)展段(堆存儲)。但是每個(gè)線程 ? ? ? ? ? ? 擁有自己的棧段,棧段又叫運(yùn)行時(shí)段,用來存放所有局部變量和臨時(shí)變量。
11. 對RunLoop的理解
? 什么是RunLoop?
從字面上看:運(yùn)行循環(huán)、跑圈
其實(shí)它內(nèi)部就是do-while循環(huán),在這個(gè)循環(huán)內(nèi)部不斷的處理各種任務(wù)(比如Source、Timer、Observer)
一個(gè)線程對應(yīng)一個(gè)RunLoop,主線程的RunLoop默認(rèn)已經(jīng)啟動,子線程的RunLoop需要手動啟動(調(diào)用run方法)
RunLoop只能選擇一個(gè)Mode啟動,如果當(dāng)前Mode中沒有任何Soure、Timer、Observer,那么就直接退出RunLoop
在開發(fā)中如何使用RunLoop?什么應(yīng)用場景?
開啟一個(gè)常駐線程(讓一個(gè)子線程不進(jìn)入消亡狀態(tài),等待其他線程發(fā)來消息,處理其他事件)
在子線程中開啟一個(gè)定時(shí)器
在子線程中進(jìn)行一些長期監(jiān)控
可以控制定時(shí)器在特定模式下執(zhí)行
可以讓某些事件(行為、任務(wù))在特定模式下執(zhí)行
可以添加Observer監(jiān)聽RunLoop的狀態(tài),比如監(jiān)聽點(diǎn)擊事件的處理(在所有點(diǎn)擊事件之前做一些事情