物件分例項物件、類物件、元類物件三種型別
nsobject *obj = [[nsobject alloc]init];
是通過類alloc出來的物件,裡邊儲存的有isa指標和成員變數
nsobject *object1 = [[nsobject alloc] init];
nsobject *object2 = [[nsobject alloc] init];
class objectclass1 = [object1 class];
class objectclass2 = [object2 class];
class objectclass3 = object_getclass(object1);
class objectclass4 = object_getclass(object2);
class objectclass5 = [nsobject class];
objectclass1-5全都是類物件,並且都是同乙個物件,也就是每個類在記憶體中只有乙個class物件
裡邊儲存的資訊有 isa指標、superclass指標、類的屬性資訊(@property)、類的物件方法資訊(instance method)、類的協議資訊(protocol)、類的成員變數資訊(ivar)
假如例項物件有個 int _age 的成員變數,那麼所謂的成員變數資訊就是這個成員變數的型別啊名字等等這些資訊,類的屬性資訊類似,協議資訊就是遵循的協議的相關資訊。
nsobject *object1 = [[nsobject alloc] init];
nsobject *object2 = [[nsobject alloc] init];
// class物件,類物件
// class方法返回的一直是class物件,類物件
class objectclass1 = [object1 class];
class objectclass2 = [object2 class];
class objectclass3 = object_getclass(object1);
class objectclass4 = object_getclass(object2);
class objectclass5 = [nsobject class];
// meta-class物件,元類物件
// 將類物件當做引數傳入,獲得元類物件
class objectmetaclass = object_getclass(objectclass1);
class objectmetaclass = object_getclass(objectclass3);
class objectmetaclass = object_getclass(objectclass5);
元類物件的記憶體結構與class物件的記憶體結構是一樣的:isa指標、superclass指標、類的類方法資訊(class method)只是其他的是nil
需要注意的是
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> 返回的就是類物件,就算[[[nsobject class] class] class]也是返回類物件而不是元類物件
- (class) {
return self->isa;
+ (class) {
return self;
XB 類物件的分類 2
isa指標 1 instance的isa指標指向class 當呼叫物件方法的時候,通過instance的isa指標找到class,然後在class中找到物件方法的實現進行呼叫 2 class的isa指標指向meta class 當呼叫類方法的時候,通過class的isa指標找到meta class,...
索尼XB950N1 震撼人心的重低音
索尼xb950n1與xb950b1非常相似,但索尼xb950n1提供了主動降噪,續航稍長一些。從藍芽3.0公升級到了藍芽4.1,改善了傳輸範圍和效能,有黑 綠色可選。外觀方面,950n1比較簡潔,加強了頭梁部分,有金屬帶,帶紋理的塑料,可以摺疊,鉸鏈是塑料的,沒有吱吱聲。舒適度方面,在戴上兩個小時後...
JS物件分類
js中,可以將物件分為 內部物件 宿主物件 和 自定義物件 三種。1,內部物件 js中的內部物件包括array boolean date function global math number object regexp string以及各種錯誤類物件,包括error evalerror range...