小碼哥iOS學習筆記第二天 OC物件的分類

2021-09-11 15:34:07 字數 2767 閱讀 9486

nsobject *obj1 = [[nsobject alloc] init];

nsobject *obj2 = [[nsobject alloc] init];

nslog(@"obj1 - %p", obj1); // 列印: obj1 - 0x100500e90

nslog(@"obj2 - %p", obj2); // 列印: obj2 - 0x1005061b0

複製**

例如, 乙個person類, 繼承自nsobject, 有乙個_age的成員變數

@inte***ce

person: nsobject

@end

@implementation

person

@end

複製**

person *p1 = [[person alloc] init];

p1->_age = 3

person *p2 = [[person alloc] init];

p2->_age = 4

複製**

nsobject *obj1 = [[nsobject alloc] init];

nsobject *obj2 = [[nsobject alloc] init];

// - (class)class

class objectclass1 = [obj1 class];

class objectclass2 = [obj2 class];

// + (class)class

class objectclass3 = [nsobject

class];

// object_getclass(例項物件)

class objectclass4 = object_getclass(obj1);

class objectclass5 = object_getclass(obj2);

複製**

nslog(@"%p %p %p %p %p",

objectclass1,

objectclass2,

objectclass3,

objectclass4,

objectclass5);

// 列印結果: 0x7fff955aa140 0x7fff955aa140 0x7fff955aa140 0x7fff955aa140 0x7fff955aa140

複製**

如下圖:

// runtime api

class objectmetaclass = object_getclass([nsobject

class]);

複製**

注意:meta-class物件class物件擁有相同的結構, 意思如下圖

class物件中,類方法資訊為空,meta-class方法中屬性資訊物件方法資訊協議資訊成員變數資訊為空

注意:- (class)class+ (class)class方法只能獲取class物件, 不能獲取meta-class物件

meta-class物件只能通過runtimeobject_getclass(類物件)獲取

class objectclass = [nsobject

class];

nslog(@"%d", class_ismetaclass(objectclass)); // 列印: 0

class objectmetaclass = object_getclass([nsstring

class]);

nslog(@"%d", class_ismetaclass(objectmetaclass)); // 列印: 1

複製**

1.class objc_getclass(const

char *aclassname)

1> 傳入字串類名

2> 返回對應的類物件

2.class object_getclass(id obj)

1> 傳入的obj可能是instance物件、class物件、meta-class物件

2> 返回值

a) 如果是instance物件,返回class物件

b) 如果是class物件,返回meta-class物件

c) 如果是meta-class物件,返回nsobject(基類)的meta-class物件

3.- (class)class、+ (class)class

1> 返回的就是類物件

- (class)

+ (class)

複製**

iOS學習 第二天

第一部分 方法 類名 函式名 方法 例項 函式名 import inte cetest nsobject void test int a 代表例項方法 instance void test2 int b 代表靜態方法 end import test.h implementationtest void...

學習第二天筆記

所有識別符號都應該以字母 a z或者a z 美元符號 或者下劃線 開始。首字元之後可以是字母 a z或者a z 美元符號 或者下劃線 或數字的任何字元組合。不能使用關鍵字作為變數名或者方法名。識別符號是大小寫敏感的。合法識別符號舉例 age salary value 1 value 非法識別符號舉例...

OC自學的第二天

成員變數的作用域 點語法 get方法 成員變數 物件方法命名規範 類方法 self 誰呼叫了當前方法,self就代表誰 1 self出現在物件方法中,self就代表物件 2 self出現在類方法中,self就代表類 可以利用self 成員變數名 訪問當前物件內部的成員變數 self 方法名 可以呼叫...