1.分類都有哪些使用場合?
(1)可以減少單個類的體積,降低耦合性,同一個類可以多人進行開發
(2)可以為系統類添加分類進行拓展
(3)模擬多繼承
(4)把靜態庫的私有方法公開
2.分類當中都可以添加哪些內容?
分類中只能添加方法,不能增加屬性(因為分類的結構體中沒有屬性串列),原則上講他只能添加方法,不能添加屬性(成員變數),實際上他是可以通過其他方式來添加屬性,比如runtime,但是使用runtime也只能實作setter和getter方法,而沒有_成員變數,如果呼叫_成員變數,程式還是會報錯,
3.在分類中添加屬性有什么注意點?分類當中要怎么保存一個屬性的值?
分類中只能添加方法,不能增加屬性(因為分類的結構體中沒有屬性串列),原則上講他只能添加方法,不能添加屬性(成員變數)
分類添加的屬性要生成get和set方法,不會自動產生私有變數,需要呼叫runtime里面的方法,進行關聯物件,
- 方法一:定義靜態變數,采用靜態變數的地址,
- 方法二:直接使用get函式的地址

4.什么是擴展?
類擴展(extension)是category的一個特例,有時候也被稱為匿名分類,他的作用是為一個類添加一些私有的成員變數和方法,
5.擴展和分類的區別?
1、類別原則上只能添加方法而不能添加屬性(能添加屬性的原因只是通過runtime解決無setter/getter方法的問題而已,如果呼叫_成員變數,程式還是會報錯),
2、類擴展不僅可以增加方法,還可以增加實體變數(或者屬性),只是該變數默認是@private型別的,(所以作用范圍只能在自身類,而不是子類或者其它地方)
3、類擴展中宣告的方法沒被實作,編譯器會報警,但是類別中的方法沒被實作編譯器是不會有任何警告的,這是因為類擴展是在編譯階段被添加到類中,而分類是在運行時添加到類中,
4、類擴展不能像類別那樣擁有獨立的實作部分(@implementation部分),也就是說,類擴展所宣告的方法必須依托對應類的實作部分來實作,
6.OC的屬性關鍵字

7.什么時候會用到weak關鍵字?
主要是用在避免回圈參考上
8.你了解的記憶體管理關鍵字具體使用物件
assign:修飾基本資料型別,如 NSInteger、BOOL、int、float 等;
weak:修飾弱參考,主要可以用于避免回圈參考
strong:既可以修飾基本資料型別,也可以修飾物件型別
copy:用于 NSString、NSArray、NSDictionary 是為了保證賦值后是一個不可變物件,以免遭外部修改而導致不可預期的結果
9.copy關鍵字有使用過嗎?具體做什么的?
用于 NSString、NSArray、NSDictionary 是為了保證賦值后是一個不可變物件,以免遭外部修改而導致不可預期的結果,
10.你對深淺拷貝理解嗎?什么是深拷貝,什么是淺拷貝?
淺拷貝:淺拷貝是會將物件的每個屬性進行依次復制,但是當物件的屬性值 是參考型別時,實質復制的是其參考,當參考指向的值改變時也會跟著變化,
深拷貝:會克隆出一個物件,資料相同,但是參考地址不同(就是拷貝A物件里面的資料,而且拷貝它里面的子物件)
11.你對拷貝是怎樣理解的?更具體點的問題:
(1)對NSString做copy是深拷貝還是淺拷貝
淺拷貝
(2)對NSString做一個mutablecopy
深拷貝
(3)對一個mutablearraycopy
深拷貝
(4)對一個mutablearray做Mutablecopy
深拷貝
具體可看下圖

12.對自定義物件實作深拷貝操作怎樣實作
實作NSCopying協議
13.你知道atomic和nonatomic的區別嗎
Atomic 原子性(默認),編譯器會自動生成互斥鎖(以前是自旋鎖,后面改為了互斥鎖),對 setter 和 getter 方法進行加鎖,可以保證屬性的賦值和取值的原子性操作是執行緒安全的,但不包括操作和訪問,
Nonatomic 非原子性,一般屬性都用 nonatomic 進行修飾,因為 atomic 耗時,
14.Readwrite和readonly有什么區別?默認使用哪個關鍵字?
Readwrite:可讀可寫
Readonly:只讀
默認可讀可寫
15.什么時候會使用到readonly這個屬性關鍵字
為了達到封裝的目的,我們應該只在確有必要時才將屬性對外暴露,并且盡量把對外暴露的屬性設為 readonly(tip:如果這時候想在物件內部通過 setter 修改屬性,可以在類擴展中將屬性重新宣告為 readwrite;如果僅在物件內部通過 _ivar 修改,則不需要重新宣告為 readwrite,)
16.copy方法生成的是一個可變物件還是不可變物件
不可變物件
17.strong關鍵字修飾的屬性有什么特點?
能夠持有物件,直接決定物件的存亡
18.強參考和弱參考有什么區別

19.Block什么時候會造成回圈應用
比如當一個物件持有block,而該block又持有該物件時,類似下面的偽代碼會照成回圈參考:
[self block:^{
self.value=1;
}];
20.回圈參考會造成什么后果?
記憶體泄漏,物件無法被釋放
21.怎么去解決回圈參考
將其中一個物件用weak修飾
22.category 中有 +load 方法嗎?+load 方法是什么時候呼叫的?+load 方法能繼承嗎?
(1)分類中有+load方法;
(2)+load方法在Runtime加載類、分類的時候呼叫;
(3)load方法可以繼承,但是一般情況下不會手動去呼叫+load方法,都是讓系統自動呼叫,
23.例如a用strong修飾參考b b用weak修飾參考a a釋放了 b會釋放嗎
會被釋放
(1)那如果b對a也是用strong呢
由于被回圈參考了,無法釋放
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/290309.html
標籤:其他
