①動態(tài)添加一個新類二打,并且給這個新類添加一個UIView的實例對象扛伍,然后打印出Type Encoding
// 創(chuàng)建一個新類
Class newClass = objc_allocateClassPair([NSObject class], "newClass", 0);
// 給類添加實例變量
class_addIvar(newClass, "_varA", sizeof(UIView *), log2(sizeof(UIView *)), @encode(UIView *));
// 在應用中注冊新類
objc_registerClassPair(newClass);
// 獲取實例變量
Ivar var_Instance = class_getInstanceVariable([newClass class], "_varA");
// 獲取成員變量名
const char *name_var = ivar_getName(var_Instance);
// 獲取成員變量類型編碼
const char *type_var = ivar_getTypeEncoding(var_Instance);
// 獲取成員變量的內(nèi)存偏移量
ptrdiff_t offset_var = ivar_getOffset(var_Instance);
NSLog(@"Ivar Name:%@ TypeEncoding:%s Offset:%td",[NSString stringWithUTF8String:name_var],type_var,offset_var);
運行結果:
Ivar Name:_varA TypeEncoding:@ Offset:8
②獲取系統(tǒng)自帶的類UIViewController里的成員變量_view,然后打印出Type Encoding
// 獲取實例變量
Ivar var_Instance2 = class_getInstanceVariable([UIViewController class], "_view");
// 獲取成員變量名
const char *name_var2 = ivar_getName(var_Instance2);
// 獲取成員變量類型編碼
const char *type_var2 = ivar_getTypeEncoding(var_Instance2);
// 獲取成員變量的內(nèi)存偏移量
ptrdiff_t offset_var2 = ivar_getOffset(var_Instance2);
NSLog(@"Ivar Name:%@ TypeEncoding:%s Offset:%td",[NSString stringWithUTF8String:name_var2],type_var2,offset_var2);
運行結果:
Ivar Name:_view TypeEncoding:@"UIView" Offset:24
為什么①和②中窒百,同樣都是UIView的實例對象黍判,打印的TypeEncoding不同呢?