Objective-C 什么是类
轉自http://www.189works.com/article-31219-1.html
之前一直做C++開發,最近2個多月轉?Objective-C, 入門的時候,遇到了很多的困惑。現在過節,正是解決他們的好時機。
主要參考來自http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html
?Objective-C 也是面向對象的語言,那么,首先需要知道的就是什么是class。
C++ 的class相對?Objective-C 中的class,就簡單明了很多了。C++ 中class簡單的說,就是一個大的struct, 絕大部分的class可以在編譯時決定好class的布局(通過虛繼承來的class成員變量只能動態確定)。當然,最關鍵的是,你不可能在運行時創建一個class,因為所有的class在運行之前已經確定下來,并保存在二進制文件中。
但是,?Objective-C 確不同,?Objective-C 可以在運行中創建class,修改class等等。那么,改如何定義?Objective-C 中的class呢。
在這之前,我們先看一個簡單的,class的實例對象。
@interface Object?
{
??? //typedef struct objc_class *Class;?
??? Class isa;??? /* A pointer to the instance's class structure */?
}
對象包含一個指向class的指針,而這也就意味著,任何包含class 的指針都可以被看做是對象(object)。
struct objc_class {????????????
??? struct objc_class *isa;??? //這里也有isa指針?
??? struct objc_class *super_class;??? //這里還有一個指向基類的指針?
??? const char *name;????????
??? long version;?
??? long info;?
??? long instance_size;?
??? struct objc_ivar_list *ivars;
??? struct objc_method_list **methodLists;
??? struct objc_cache *cache;?
???? struct objc_protocol_list *protocols;?
};
顯然,在?Objective-C 眼中,一切都是對象,甚至包括我們的class。而對象就是class的實例,那么,class是什么的實例呢,metaclass。
事實上,我們并沒有解決問題。metaclass 事實上又是root metaclass 的實例,而root metaclass 自己又是 root metaclass 的實例,一圖勝千言,不做贅述。
posted on 2012-05-14 11:24 linyawen 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/linyawen/archive/2012/05/14/2499075.html
總結
以上是生活随笔為你收集整理的Objective-C 什么是类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 3177 判决素数个数
- 下一篇: 干的地瓜梗怎么做好吃啊?