摘要: XCode 內置GDB,我們可以在命令行中使用 GDB 命令來調試我們的程序。下面將介紹一些常用的命令以及調試技巧。 閱讀全文
01 2012 檔案
摘要: 在前文中總結到“ObjC 為每個類的定義生成兩個 objc_class ,一個即普通的 class,另一個即 metaclass。我們可以在運行期創建這兩個 objc_class 數據結構,然后使用 objc_addClass 動態地創建新的類定義。”今天我們來如何在運行時動態創建類。下面這個函數就是應用前面講到的Class,MetaClass的概念,在運行時動態創建一個類。 閱讀全文
摘要: 最近打算寫一些ObjC中比較底層的東西,尤其是 runtime 相關的。從哪里入手呢?那當然是最基本的類與對象。與C++相比,ObjC中的類與對象結構要簡潔與一致得多(參考《深度探索C++對象模型》,你就知道C++中類與對象結構的復雜)。本文將詳細講解ObjC中類與對象的結構,下回將講如何在 runtime 時操作類。
總結:ObjC 為每個類的定義生成兩個 objc_class ,一個即普通的 class,另一個即 metaclass。我們可以在運行期創建這兩個 objc_class 數據結構,然后使用 objc_addClass 動態地創建新的類定義。這個夠動態夠強大的吧?下回講演示如何在運行期動態創建新類。 閱讀全文
總結:ObjC 為每個類的定義生成兩個 objc_class ,一個即普通的 class,另一個即 metaclass。我們可以在運行期創建這兩個 objc_class 數據結構,然后使用 objc_addClass 動態地創建新的類定義。這個夠動態夠強大的吧?下回講演示如何在運行期動態創建新類。 閱讀全文
摘要: 在前文深入淺出Cocoa之消息中,我簡要介紹了ObjC 中消息的基本情況,包括SEL查找,緩存以及消息轉發等。在本文中,我要介紹一個很有趣的技術,Method swizzling,通過這個手法,我們可以動態修改方法的實現,從而達到修改類行為的目的。當然,還有其他辦法(如 ClassPosing,Category)也可以達到這個目的。ClassPosing 是針對類級別的,是重量級的手法,Category 也差不多,比較重量級,此外 Category 還無法避免下面的遞歸死循環(如果你的代碼出現了如下形式的遞歸調用,應該考慮一下你的設計,而不是使用在這里介紹的 Method Swizzling 手法,:))。 閱讀全文