小知識點

isa指針

isa指針指的就是類本身自己 實例對象經過對象的isa指針指向類 是一個class 類型的指針,每一個實例對象都有 isa 指針,他指向對象的類編程

Class 是一個 objc_class 結構類型的指針, id是一個 objc_object 結構類型的指針.數組

https 加密

非對稱加密交換祕鑰,對稱通訊安全

服務端 生成一對私鑰和公鑰 
發送密文的一方使用對方的公鑰進行加密處理「對稱的密鑰」,
而後對方用本身的私鑰解密拿到「對稱的密鑰」,
這樣能夠確保交換的密鑰是安全的前提下,使用對稱加密方式進行通訊
複製代碼

鏈式編程

什麼是鏈式編程,一句話就是方法返回值必需要有方法的調用者!markdown

weak 原理說明

一個對象可能會被屢次弱引用,當這個對象被銷燬時,咱們須要找到這個對象的全部弱引用,因此咱們須要將這些弱引用的地址(即指針)放在一個容器裏(好比數組)。當對象再也不被強引用時須要銷燬的時候,能夠在SideTable中 經過這個對象的地址找到引用值,清空引用值。同時, SideTable結構中還有weak_table_t結構,該結構也是一個散列表,key 爲對象地址,value 爲一個數組,裏面保存着指向該對象的全部弱指針。當對象釋放的時候,先清空引用哈希表RefcountMap對應的引用值,遍歷弱指針數組,依次將各個弱指針置爲 nil。
複製代碼

blog.csdn.net/u013378438/…ide

內存(堆內存)回收是什麼意思

NSObject *obj = [[NSObject alloc] init]
複製代碼

代碼對應的內存佈局以下,obj 指針存在於棧取,obj 對象存在於堆區。obj 指針的回收由棧區自動管理,堆區的內存須要開發者本身管理(MRC)狀況。所謂的堆內存回收並非指將 obj 對象佔有的內存給挖去或是將空間數據清空爲0,而是指 obj 對象本來佔有的空間能夠被其餘人利用(即其餘指針能夠指向該空間)。其餘指針指向該空間時,從新初始化該空間,將空間原有數據清零。函數

簽名機制

www.jianshu.com/p/fe8212d25…oop

[super class]

super 調用底層會轉換爲objc_msgSendSuper函數的調用,objc_msgSendSuper 函數接收 2 個參數 objc_super 結構體和 SEL ,objc_super結構以下:佈局

struct objc_super {
    __unsafe_unretained _Nonnull id receiver; // 消息接收者
    __unsafe_unretained _Nonnull Class super_class; // 消息接收者的父類
};
複製代碼

[super class] 在調用過程當中,底層轉化爲 objc_msgSendSuper({self, [Animal class]}, @selector(class)); ,同 objc_msgSend 函數相比至關於多了第二個參數,但消息接收者仍然是 self ,因此打印結果爲 Cat。加密

因而可知 當咱們調用[self class] 時候實際上編譯器最終給咱們轉成 objc_msgSend(self,@selector(class)) , 消息的接收者是當前所在類的實例對象 , 這個時候就會去 self 所在類 Student 去查找 class 方法 , 若是當前類 Student 沒有 class 會向Student 父類 Person 類找 class 方法, 若是 Person 類也沒有找到 class 方法,最終會找到最頂級父類 NSObject 的 class 方法, 最終找到 NSObject 的 class 方法 ,並調用了object_getClass(self) ,因爲消息接收者是 self 當前類實例對象, 因此最終 [self class]輸出 Studentspa

相關文章
相關標籤/搜索