原创 iOS開發進階:自動釋放池的實現原理分析

在MRC下如下代碼: NSObject *obj = [[NSObject alloc] init] autorelease]; 通過xcrun命令可以轉換成cpp源代碼,在代碼中包含__AtAutoreleasePool結構體如下: /

原创 iOS開發進階:RunLoop相關分析總結

什麼是Runloop? Runloop是通過內部維護的事件循環來對事件和消息進行管理的一種機制。當沒有消息需要處理的時候,線程進入休眠以避免佔用資源,有消息需要處理時,立即被喚醒。 runloop循環不是單獨的do-while循環,而是發生

原创 iOS開發進階:retain、release、dealloc

一、Tagged Pointer細節探究 蘋果爲了提高執行效率和節省內存,引入了Tagged Pointer的概念,對於64位程序來說可以達到3倍的訪問速度和100多倍的創建銷燬的速度。支持Tagged Pointer的類型以某種方式創建

原创 iOS開發進階:RunLoop

什麼是Runloop? Runloop是通過內部維護的事件循環來對事件和消息進行管理的一種機制。當沒有消息需要處理的時候,線程進入休眠以避免佔用資源,有消息需要處理時,立即被喚醒。 runloop循環不是單獨的do-while循環,而是發生

原创 iOS開發進階:block的分析及循環引用的解決方案

iOS開發中block隨處可見,什麼是block呢?block是一個匿名函數,是一個代碼塊,把代碼放在這個代碼塊中,在需要使用的時候進行調用。block會封裝函數以及函數的調用環境: -封裝函數:是指block會把block內部的參數返回

原创 iOS開發進階:鎖的分析

我們在使用多線程的時候,同一時刻可能會有多個線程訪問同一內存的內容,這樣就很容易引發數據混亂(數據安全)的問題。爲了減少或者避免這種問題的出現,我們需要使用鎖來保證統一時刻只有一個線程訪問這一塊內存。鎖可以讓數據的訪問更安全。 我們常見

原创 iOS開發進階:GCD函數分析

dispatch_queue_create dispatch_queue_create調用了_dispatch_lane_create_with_target,繼續調用_dispatch_object_alloc、_dispatch_qu

原创 iOS開發進階:KVC 1.KVC鍵值查找流程 2.KVC對結構體類型的存取 3.KVC操作符方面的運用 4.自定義KVC

KVC是由NSKeyValueCoding非正式協議啓用的一種機制,對象採用該協議提供對其屬性的間接訪問。當對象符合鍵值編碼時,其屬性可以通過簡潔、統一的消息傳遞接口通過字符串參數進行尋址。這種間接訪問機制補充了實例變量及其相關訪問器方法

原创 iOS底層探索:多線程與GCD

一、多線程 1.1進程與線程 進程:進程是指在系統中正在運行的一個應用程序;每個進程之間是獨立的,每個進程均運行在其專用的受保護的內存空間內。 線程:線程是進程的基本執行單元,一個進程的所有任務都在線程中執行;進程要想執行任務,必須要

原创 iOS底層探索:方法查找與消息轉發

Objective-C的方法的調用都是一個消息轉發的過程,objc_msgSend(receiver, selector, ...),第一個參數表示消息的接收者,第二個參數表示消息的名稱,即方法。 方法的調用,中間經歷了消息的快速查找、

原创 Flutter學習筆記:基礎控件的使用

flutter是一款移動應用跨平臺框架,使用Dart語言編寫的一份代碼可以生成iOS和Android兩個高性能、高保真的應用程序。Flutter不借助原生的渲染能力,而是自己實現了一套與Android和iOS一樣的渲染原理,從而在性能上與

原创 iOS底層探索:從dyld到main 一、dyld內部的主要流程 二、map_images流程 三、load_images流程

問自己兩個問題: 1.應用啓動在main函數之前到底做了什麼事情? 2.類、分類中load方法的加載順序怎樣的?分類中出現的與主類同名的方法,會調用哪一個呢? 這些問題,不跟蹤一次底層的源碼?怎麼會領悟得透徹呢? 我們實現一個類,然後在

原创 iOS底層探索:load、initialize方法的調用規則

通過上一篇的介紹我們知道了App的啓動流程中dyld做了哪些事情,那麼: +load和+initialize分別是什麼時候調用的呢?以及他們在父類,子類,分類中調用的順序是什麼樣的呢? 我們先準備如下幾個Class和Category:

原创 iOS底層探索:KVO 1.準備工作 2.屬性觀察 3.對可變數組的觀察

使用稱爲isa swizzling的技術實現自動鍵值觀察。顧名思義,isa指針指向維護分派表的對象類。這個分派表本質上包含指向類實現的方法的指針以及其他數據。 當一個觀察者爲一個對象的屬性註冊時,被觀察對象的isa指針被修改,指向一箇中間

原创 iOS底層探索:KVC 1.KVC鍵值查找流程 2.KVC對結構體類型的存取 3.KVC操作符方面的運用 4.自定義KVC

KVC是由NSKeyValueCoding非正式協議啓用的一種機制,對象採用該協議提供對其屬性的間接訪問。當對象符合鍵值編碼時,其屬性可以通過簡潔、統一的消息傳遞接口通過字符串參數進行尋址。這種間接訪問機制補充了實例變量及其相關訪問器方法