首先,貼出一小部分獲取Ivar相關(guān)信息的代碼撰筷,如下
使用OC RunTime獲取類的成員變量 以上代碼都是比較簡單的陈惰,而且網(wǎng)上也有很多類似的代碼,就不一一敘述毕籽。
注意坑來了LТ场!9赝病H芪铡!U舨ァK堋!A狻H馕ⅰ!@5锬伞!A蟀@筒堋!@拍Α铁孵!
在此次學(xué)習(xí)中唯一比較坑的是 object_getIvar 不支持非對象,具體錯誤
? ERROR:
?Theard1 :EXC_BAD_ACCESS(code 1, address);
解決辦法:
unsigned char *stuffBytes = (unsigned char *)(__bridge void *)object;
double floatValue = *((double *)(stuffBytes + offset));
//stuffBytes ?指向你要獲取成員變量的對象房资, offset 該成員變量的地址偏移量
return @(floatValue);
這里使用了指針直接訪問地址的方式通過偏移量來找到變量的存儲地址蜕劝,再通過類型強(qiáng)轉(zhuǎn),得到我們所需要的值轰异。
參考文章:https://www.bignerdranch.com/blog/inside-the-bracket-part-5-runtime-api/