直接看代码吧
Dog.h
~~~
#import <Foundation/Foundation.h>
@interface Dog : NSObject
@property(nonatomic, strong) NSString * dogName;
@property(nonatomic, assign) NSInteger dogAge;
@end
~~~
Dog.m
~~~
#import "Dog.h"
@interface Dog ()
@property(nonatomic, strong) NSString * dogSex;
@end
@implementation Dog
- (instancetype)init
{
self = [super init];
if (self) {
self.dogName = @"dahuang";
self.dogAge = 2;
}
return self;
}
- (void) printDogName
{
NSLog(@"dogName");
}
@end
~~~
测试代码:
~~~
#import "ViewController.h"
#import <objc/runtime.h>
#import <objc/message.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.
Dog * dog = [[Dog alloc] init];
unsigned int outCount = 0;
unsigned int outCountMethod = 0;
Ivar * ivars = class_copyIvarList([dog class], &outCount);
Method * methods = class_copyMethodList([dog class], &outCountMethod);
for (int i = 0; i<outCount; i++) {
// 取出i位置对应的成员变量
Ivar ivar = ivars[i];
// 查看成员变量
const char *name = ivar_getName(ivar);
NSLog(@"%s", name);
}
for (int j = 0; j < outCountMethod; j++) {
Method method = methods[j];
SEL methodSEL = method_getName(method);
const char * selName = sel_getName(methodSEL);
if (methodSEL) {
NSLog(@"sel------%s", selName);
}
}
}
~~~
输出:
~~~
2015-11-02 12:18:07.851 02-runtime[1970:51391] _dogName
2015-11-02 12:18:07.852 02-runtime[1970:51391] _dogAge
2015-11-02 12:18:07.853 02-runtime[1970:51391] _dogSex
2015-11-02 12:18:07.853 02-runtime[1970:51391] sel------setDogName:
2015-11-02 12:18:07.854 02-runtime[1970:51391] sel------setDogAge:
2015-11-02 12:18:07.855 02-runtime[1970:51391] sel------printDogName
2015-11-02 12:18:07.855 02-runtime[1970:51391] sel------dogName
2015-11-02 12:18:07.855 02-runtime[1970:51391] sel------dogAge
2015-11-02 12:18:07.856 02-runtime[1970:51391] sel------dogSex
2015-11-02 12:18:07.856 02-runtime[1970:51391] sel------setDogSex:
2015-11-02 12:18:07.856 02-runtime[1970:51391] sel------.cxx_destruct
2015-11-02 12:18:07.857 02-runtime[1970:51391] sel------init
~~~
- 前言
- 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 运行时之三:方法与消息