[person new] 做了三件事:
1)申請記憶體空間
2)給例項初始化
3)返回空間首位址
例項變數儲存在堆區
``指標(物件名)儲存在棧區
物件方法儲存在**區
呼叫方法先找到p所指向的堆區的指標—isa然後再找到isa所指向的**區的方法
物件方法只能由物件來呼叫,類方法只能由類來呼叫,不能當做函式來呼叫
函式屬於整個檔案,函式的宣告可以在main內部,也可以在main函式外面,除了@inte***ce @end之間
函式:1)所以函式都是平行的
2)函式不存在隸屬關係
3)使用時可以直接掉用
4) 不可以訪問物件中的成員變數
@inte***ce @end 不可以巢狀
在宣告時不可以對成員變數初始化
成員變數和方法不可以用static修飾
[person new]做了三件事:
1)申請記憶體空間
2)給例項變數初始化
3)返回空間首位址
申請空間在記憶體的哪個區:
new的時候申請的空間在空間的堆區
如果例項變數是基本型別,此時初始化為0.
如果是字串型別,則初始化為null
例項變數又儲存在什麼地方
堆區p(指標變數名)棧區
物件方法儲存在**區
為什麼[p run]; 就可以呼叫方法了?如何呼叫的
首先找p對應的空間,然後找到_isa,再找到_isa所指向的**空間,然後到該空間中找方法
15)類方法:
類方法呼叫不需要例項
類方法的呼叫 [類名稱 類方法名稱]
類方法名稱和物件方法名稱可以相同
類方法的好處是不需要建立物件,直接通過類名進行訪問,不需要在堆區建立任何空間
類方法中不允許訪問例項變數,可以傳個引數
例項方法可以訪問例項變數
物件方法可以呼叫物件的其它方法
在類方法中可以呼叫類的其它方法,可以用self,也可以使用其它類名呼叫方法方法
在類方法中也可以呼叫物件方法,只不過是通過引數把物件傳過來或建立乙個物件
類方法不能呼叫自身(死迴圈)
[[car alloc] init] 等同於[car new]
匿名類作為方法引數使用:
person *p = [[person alloc] init]
[p gohome:[car new]];
16)封裝:
例項變數只能被當前類的物件方法訪問
set方法的書寫規範:
1)set方法一定是乙個物件方法
2)set方法一定不能有返回值
3)set方法必須以set開頭
4)set之後跟的是例項變數去掉下劃線,並且首字母大寫
5)set方法一定有引數,而且引數型別和例項變數的型別一致
6)oc中沒有方法過載,oc中方法不能同名
7)static 定義的變數只能在當前檔案中使用
17)self:
self指呼叫當前方法的物件
self在當前類方法中指代當前類
person *p = [person new];
[p class]; //返回當前類
函式內部可以定義和全域性變數同名的變數
如果同名,區域性變數會暫時遮蔽全域性變數的作用域(可以用self來區分)
18)繼承:
基類的私有屬效能被繼承,但不能使用
oc中是單繼承
呼叫物件方法先查詢本類中是否有方法,否則查詢父類
支援多層繼承
變數預設修飾符是@protect
@private 只能在當前類的物件方法中使用
.m中定義的變數就是私有變數
沒有在.h中宣告的方法是私有方法
私有方法不能被子類繼承
nslog("%p", d); 列印物件位址
nslog("%@", d); 列印類名+物件位址
以%@的格式列印物件d,此時呼叫物件的description方法,如果子類中沒有重寫description方法則呼叫父類的
[d class]; 獲取dog類
類方法不能訪問例項變數
不要在description方法中使用%@和self會造成死迴圈
OC 封裝,繼承,多型
就是將一段 裝成乙個整體,將內部的例項變數和方法設定訪問許可權 1.set 方法1.作用 提供乙個方法給外界設定成員變數值,可以在方法裡面對引數進行相應過濾 2.命名規範 1 方法名必須以 set開頭 2 set後面跟上成員變數的名稱,成員變數的首字母必須大寫 3 返回值一定是 void 4 一定要...
iOS開發之OC語法基礎(二) 繼承和例項化
1 掌握物件導向程式設計特性 繼承 2 掌握oc中的自定義初始化方法 3 掌握oc中的便利構造器的寫法 1 oc中,乙個類可以繼承另外乙個類 2 被繼承的類稱為父類 super class 或超類 3 繼承的類稱為子類 subclass 4 子類可以直接使用父類的部分特徵和行為 注意 oc中只允許每...
OC中的封裝繼承多型
setter方法 作用 設定成員變數的值 格式 1.setter方法一定是物件方法 2.一定沒有返回值 3.一定以set開頭,並且set後面跟上需要設定的成員變數的名稱去掉下劃線,並且首字母大寫 4.一定有引數,引數型別一定和需要設定的成員變數的型別一致,並且引數名稱就是成員變數的名稱去掉下劃線 5...