runtime-API-object

1. Class object_getClass(id obj)

獲取isa指向的class

  NSPerson *person = [[NSPerson alloc] init];
  NSLog(@"%p %p",
              object_getClass(person),
              object_getClass(object_getClass(person))
);

//log
2020-08-29 18:13:25.156169+0800 runtime_API[13610:390470] 0x1000020f0 0x1000020c8

2. Class object_setClass(id obj, Class cls)

設置isa指向的class

  NSPerson *person = [[NSPerson alloc] init];
  object_setClass(person, NSCar.class);
  NSLog(@"%@",        object_setClass(person, NSCar.class));
  [person run];

// log
2020-08-29 18:21:24.521334+0800 runtime_API[13712:397596] NSCar
2020-08-29 18:21:24.521394+0800 runtime_API[13712:397596] -[NSCar run]

3. BOOL object_isClass(id obj)

判斷一個oc對象是否class

        NSLog(@"%d %d %d",object_isClass(person),
              object_isClass(object_getClass(person)),
              object_isClass(object_getClass(object_getClass(person)))
              );

//log
2020-08-29 19:17:35.832826+0800 runtime_API[14234:426760] 0 1 1

4.1. Ivar class_getInstanceVariable(Class cls, const char * name)

獲取示例變量信息

4.2. id object_getIvar(id obj, Ivar ivar)

獲取成員變量的值

4.3. void object_setIvar(id obj, Ivar ivar, id value)

設置成員變量的值

4.4. void object_setIvarWithStrongDefault(id obj, Ivar ivar, id value)

設置成員變量的值(默認strong)

    //獲取示例變量信息
    Ivar age_ivar = class_getInstanceVariable(NSPerson.class, "_age");
    const char *age_name = ivar_getName(age_ivar);
    const char *age_type = ivar_getTypeEncoding(age_ivar);
    NSLog(@"%s %s", age_name,age_type);
    
    //設置和獲取成員變量的值

    //age
    object_setIvar(person, age_ivar, (__bridge id)(void *)27);
    id age = object_getIvar(person, age_ivar);
    NSLog(@"%d %d %@",person.age, (int)age,[person valueForKey:@"_age"]);
    
    //name
    Ivar name_ivar = class_getInstanceVariable(NSPerson.class, "_name");
    object_setIvar(person, name_ivar, @"bien");
    id name = object_getIvar(person, name_ivar);
    NSLog(@"%@ %@ %@",name,person.name,[person valueForKey:@"_name"]);

    //設置成員變量的值(默認strong)
    object_setIvarWithStrongDefault(person, name_ivar, @"wbn");
    NSLog(@"%@",person.name);

    
    //log
2020-08-29 20:23:18.234092+0800 runtime_API[15160:476832] _age i
2020-08-29 20:23:18.234382+0800 runtime_API[15160:476832] 27 27 27
2020-08-29 20:23:18.234551+0800 runtime_API[15160:476832] bien bien bien
2020-08-29 20:40:01.942927+0800 runtime_API[15301:488642] wbn

ARC不可用

id  object_copy(id obj, size_t size)   OBJC_ARC_UNAVAILABLE;
id  object_dispose(id obj)  OBJC_ARC_UNAVAILABLE;
Ivar object_setInstanceVariable(id obj, const char * name, void * value)
Ivar object_setInstanceVariableWithStrongDefault(id obj,const char * name,void * value)
Ivar object_getInstanceVariable(id obj, const char * name, void * * outValue)

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末乳蓄,一起剝皮案震驚了整個濱河市熄守,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖挣柬,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钥顽,死亡現場離奇詭異庇忌,居然都是意外死亡舞箍,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門皆疹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疏橄,“玉大人,你說我怎么就攤上這事略就∩悠龋” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵表牢,是天一觀的道長窄绒。 經常有香客問我,道長崔兴,這世上最難降的妖魔是什么彰导? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮敲茄,結果婚禮上位谋,老公的妹妹穿的比我還像新娘。我一直安慰自己堰燎,他們只是感情好掏父,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秆剪,像睡著了一般赊淑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸟款,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天膏燃,我揣著相機與錄音,去河邊找鬼何什。 笑死组哩,一個胖子當著我的面吹牛,可吹牛的內容都是我干的处渣。 我是一名探鬼主播伶贰,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罐栈!你這毒婦竟也來了黍衙?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤荠诬,失蹤者是張志新(化名)和其女友劉穎琅翻,沒想到半個月后位仁,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡方椎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年聂抢,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棠众。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡琳疏,死狀恐怖,靈堂內的尸體忽然破棺而出闸拿,到底是詐尸還是另有隱情空盼,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布新荤,位于F島的核電站揽趾,受9級特大地震影響,放射性物質發(fā)生泄漏苛骨。R本人自食惡果不足惜但骨,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望智袭。 院中可真熱鬧,春花似錦掠抬、人聲如沸吼野。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞳步。三九已至,卻和暖如春腰奋,著一層夾襖步出監(jiān)牢的瞬間单起,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工劣坊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘀倒,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓局冰,卻偏偏與公主長得像测蘑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子康二,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容