類的本質
1,類也是個物件
> 其實類也是乙個物件,是class型別的物件,簡稱「類物件」
> class型別的定義
typedef struct objc class *class;
> 類名就代表著類物件,每個類只有乙個類物件
2,獲取類物件的2種方式
(1),class c = [person class];
(2),person *p = [person new];
class c2 = [p class];
3,類物件方法舉例
類物件呼叫類方法
class c = [person class];
person *p2 = [c new];
+load和+initialize方法
1,程式啟動時,就會載入專案中所有的類和分類,而且載入後會呼叫每個類和分類的+load方法。只會呼叫一次
2,當第一次使用某個類時,就會呼叫當前類的+initialize方法
3,先載入父類,再載入子類(先呼叫父類的+load方法,再呼叫子類+load方法)
先初始化父類,再初始化子類(先呼叫父類的+initialize方法,再呼叫子類的+initialize方法)
description方法
1,會呼叫物件p的-description方法
2,拿到-description方法的返回值(nsstring *)顯示到螢幕上
3,-description方法預設返回的時「類名+記憶體位址」
4,+description決定了類物件的輸出結果
5,description方法體裡面不能輸出self,會造成死迴圈
6,方法示例
- (nsstring *)description
nslog輸出補充
輸出行號
nslog(@"%d",_line_);
輸出當前函式名
nslog(@"%s",_func_);
輸出原始檔的名稱
nslog輸出c語言字串的時候,不能有中文
nslog(@"%s",_file_);
sel原理
> sel其實是對方法的一種包裝,將方法包裝成乙個sel型別的資料,去找對應的方法位址,找到方法位址就可以呼叫方法
> 每個類方法列表儲存在類物件中
> 每個類的方法都有乙個與之對應的sel型別的物件
> 根據乙個sel物件就可以找到方法的位址,進而呼叫方法
> sel型別的定義 typedef struct obic selector *sel;
1,sel使用
當物件呼叫方法時
(1),把方法包裝sel型別的資料
(2),根據sel資料找到對應的方法位址
(3),根據方法位址呼叫對應的方法
呼叫方法可以用兩種方式
直接用物件呼叫
[p test]
間接呼叫
[p performselector:@selector(test)];
2,sel物件的創造
sel s=@selector(test);
sel s2 = nsselectorfromstring(@"test");
3,sel物件的其他用法
// 將sel物件轉為nsstring物件
nsstring *str = nsstringfromselector(@selector(test));
person *p=[person new];
// 呼叫物件p的test方法
[p performselector:selector(test)];
4,sel 型別_cmd代表著當前方法
[self performselector:_cmd]; 死迴圈
OC中類與物件的使用介紹
1 類如何生成 擁有相同 類似 屬性和行為的物件都可以抽象出乙個類。類只是一張物件的設計圖。2 設計類的有幾部分 1 類名 書寫規範 類名的第乙個字母必須是大寫 不能有下劃線 多個英文單詞,用駝峰表示 2 屬性 3 行為 哪個物件對行為最清楚,就把行為寫到哪個物件中去。3 oc中類的書寫格式 1 在...
OC中類與物件的使用介紹
1 類如何生成 擁有相同 類似 屬性和行為的物件都可以抽象出乙個類。類只是一張物件的設計圖。2 設計類的有幾部分 1 類名 書寫規範 類名的第乙個字母必須是大寫 不能有下劃線 多個英文單詞,用駝峰表示 2 屬性 3 行為 哪個物件對行為最清楚,就把行為寫到哪個物件中去。3 oc中類的書寫格式 1 在...
oc中的oop基礎及類的基本介紹
物件導向的 oop 的基礎知識 類 class 表示一組物件資料的結構體,物件通過類來得到自身。類名首字母大寫。物件 objcet 是一種包含值和指向其類的隱藏指標的結構體。執行中的程式中通常會有n個物件,首字母不用大寫。例項 instance 是對物件的另一種稱呼。訊息 message 是物件執行...