object_setIvar 給一個對象的屬性設置新值
~~~
/**
* Sets the value of an instance variable in an object.
*
* @param obj The object containing the instance variable whose value you want to set.
* @param ivar The Ivar describing the instance variable whose value you want to set.
* @param value The new value for the instance variable.
*
* @note \c object_setIvar is faster than \c object_setInstanceVariable if the Ivar
* for the instance variable is already known.
*/
OBJC_EXPORT void object_setIvar(id obj, Ivar ivar, id value)
__OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
~~~
~~~
#import "ViewController.h"
#import <objc/runtime.h>
#import "Person.h"
#import "Dog.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
Person * p1 = [[Person alloc] init];
Ivar ivar = class_getInstanceVariable([p1 class], "_name");
object_setIvar(p1, ivar, @"newNameValue");
NSLog(@"%@", p1.name);
}
~~~
Person中name初始值為:@"sb"
輸出:

- 前言
- object_getIvar
- object_getClass
- object_getClassName
- object_setClass
- object_isClass
- object_setIvar
- objc_getClass
- Too many arguments to function call...
- objc_msgSend
- class_copyIvarList和class_copyMethodList
- method_exchangeImplementations
- 運用SEL,運行時改變兩個方法的實現
- class_getInstanceMethod和class_getClassMethod
- class_respondsToSelector
- Objective-C Runtime 運行時之三:方法與消息