一、 id
id是萬能指標,能指向任何oc物件,相當於nsobject *
id型別的定義
typedef struct objc_object
*id;
id的使用:
id後面不要加 「*」 ,因為id本身就是指標型別
id p = [類名 new];
id的侷限性:
如果呼叫乙個不存在的方法,編譯器會立馬報錯
二、構造方法
1.
構造方法是用來初始化物件的方法
完整地建立乙個可用的物件可分為2步
(1). 分配儲存空間,這個用到alloc方法,該方法是乙個類方法
(2). 初始化,用init方法,該方法是物件方法。
void main()
其實這兩條**可以合成一條:
void main()
那麼這就是建立物件的過程,前面用到的物件建立[person new], 其實裡面的new方法就是alloc和init的融合而成。
2.重寫 -init方法
[super init] 呼叫的是父類的init方法,返回的是當前所指向的物件
@implementation person
// 重寫 -init方法
- (id)init
//返回乙個已經初始化完畢的物件
return self;
@end
**可以進一步優化:
- (id)init
return self;
}
重寫構造方法的目的:為了讓物件建立出來,成員變數就會有一些固定的值。
重寫構造方法的注意點:
--> 先呼叫父類的構造方法([super init])
--> 再進行子類內部成員變數的初始化
構造方法 -init方法的執行過程:(如下圖)
3.自定義構造方法
自定義構造方法的規範:
--> 一定是物件方法,一定以 - 開頭
--> 返回值一般是id型別
--> 方法名一般以initwith開頭
@implementation person
- (id)init // 重寫父類的init方法
return self;
}- (id)initwithage:(int)age
return self;
}- (id)initwithname:(nsstring *)name
return self;
}@end
**還可以換一種方式,實現的功能一樣,由於用@property宣告的成員變數預設是私有的,那麼子類不能直接訪問父類成員變數,可以用self關鍵字和點語法來呼叫,如:
- (id)initwithname:(nsstring *)name andage:(int)age andno:(int)no
return self;
}
再來看看這種方式:
- (id)initwithname:(nsstring *)name andage:(int)age andno:(int)no
return self;
}
相比上段該段**更加完美,這樣
父類的屬**給父類方法去處理,子類方法處理子類自己的屬性
Objective C 一一 id型別
id 是乙個資料型別 並且是乙個動態資料型別 id是乙個資料型別 並且是乙個動態資料型別 既然是資料型別 所以就可以用來 1.定義變數 2.作為函式的引數 3.作為函式的返回值 靜態型別和動態型別 為什麼要有動態型別?id資料型別與靜態型別 靜態型別 將乙個指標變數定義為特定類的物件時,使用的是靜態...
OBJECTIVE C語言基礎
1.oc語言的特點 objective c,通常寫作objc,oc和較少用的 objective c或obj c,是擴充c的物件導向程式設計語言。objective c是靜態的,強型別定義的語言。只允許單根繼承 cocoa中的根是nsobject 2.常量 程式執行過程中,值不能被改變的量稱為常量。...
Objective C 記憶體管理基礎
之前的兩篇拙文c語言 記憶體管理基礎 c語言 記憶體管理深入 介紹了關於c語言在記憶體管理方面的相關知識。但是對於從事ios開發的同胞們來說,顯然objective c用的更多,所以筆者想用兩篇文章盡量完整的介紹一下objective c的記憶體管理,本文為第一部分,將從類和物件 所有權策略及引用計...