iOS遍歷類中的屬性名runtime

2022-05-21 21:33:13 字數 1282 閱讀 8375

栗子:有乙個zhhassertnewnew類,類中有兩個屬性

@property (nonatomic, strong) nsstring* name;

@property (nonatomic, assign) int age;

1,匯入#import

2,實現方法

void test() {

u_int count = 0;

ivar* ivars = class_copyivarlist(objc_getclass("zhhassertnewnew"), &count);

for (int i=0; iivar ivar = ivars[i];

//name

const char* name = ivar_getname(ivar);

nslog(@"name->%s",name);

//type

const char* type = ivar_gettypeencoding(ivar);

nslog(@"type->%s",type);

//得到實際的型別

class c = realtypewithtype(type);

nslog(@"class->%@",c);

/* log列印結果

name->_age

type->i

class->(null)

name->_name_

type->@"nsstring"

class->nsstring

關於type

如果返回i代表int型別

如果返回@"nsstring"代表nsstring

...同理

//釋放:與copy對應

free(ivars);

//通過返回型別返回實際型別

class realtypewithtype(const char* type) {

nsstring* code = [nsstring stringwithutf8string:type];

if ([code hasprefix:@"@"] && (code.length > 3)) {

//去掉前面的@"和後面的"

code = [code substringfromindex:2];

code = [code substringtoindex:code.length-1];

return nsclassfromstring(code);

//基本資料型別沒做處理

return nil;

3,呼叫.

屬性名的遍歷

symbol作為屬性名,不會出現在for in,for of迴圈中,也不會被object.keys object.getownpropertynames json.stringify 返回,但是它也不是私有屬性,有乙個object.getownpropertysymbols方法,可以獲取指定物件的所...

iOS類的屬性研究

定義乙個類並定義一些屬性用來測試。inte ce sktestclassproperty nsobject brief 測試字串屬性 t nsstring c,v name property nonatomic,copy nsstring name brief 測試整形屬性 nsinteger tq...

不定類名的類方法和屬性呼叫

有時候,php指令碼裡使用到的類名會是不定值的變數,這個時候需要一種,能夠通過字串作為引數來呼叫以該字串為名稱的類的方法和屬性的途徑。目前還沒有發現較好的呼叫不定類名的屬性的通用途徑,即可以同時兼顧例項化不定類名和不定類名的雙冒號呼叫屬性這兩種形式的途徑,只能照顧到 class new classn...