添加类
1 | objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes) |
具体代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18- (void)allocClass{
Class clas = objc_allocateClassPair(NSClassFromString(@"FY"), "FYss", 0);
objc_property_attribute_t type = {"T", "@\"NSString\""};
objc_property_attribute_t ownership = { "C", "" };
objc_property_attribute_t backingivar = { "V", "_ivar1"};
objc_property_attribute_t attrs[] = {type, ownership, backingivar};
bool success = class_addProperty(clas, "nameIvar", attrs, 3);
if (success) {
NSLog(@"addIvar success");
if (class_isMetaClass(clas)) {
NSLog(@"是一个类");
}
}
objc_registerClassPair(clas);
[self printPropreListClass:clas];
}
实例化类
1 | // 创建类实例 |
实例
1 | id object_copy(id obj, size_t size) //拷贝obj |
发送消息
1 | id objc_msgSend(id self, SEL op, ...)// id 发送消息给SEL op |
当我们用OC调用方法的时候,其实底层是obj发送消息的过程,就够obj发送消息给SEL,然后objruntime中会在objSELList中寻找,当然不是每次都去遍历所有的方法的,而是在methodCache,它会先去常用的方法cache在中查找,要是cache中没有这个方法,再去遍历所有的方法。参考:Runtime源码点这里
具体测试
1 | objc_msgSend(self,@selector(msgTest)); |
1 | id method_invoke(id receiver, Method m, ...) 调用receiver的方法 id 不能是nil |
今天就到这吧,明天吧协议和属性看了。更多文章在www.fgyong.cn