动态实现Objective-C中属性(Property)的方法
2016-03-16 20:48
393 查看
要动态实现OC属性方法需要在类的实现中用@dynamic修饰
@dynamic propertyName; //表示编译器须动态地生成该属性对应地方法。
可以通过实现+ (BOOL) resolveInstanceMethod:和 + (BOOL)resolveClassMethod:来动态地实现给定选标 的对象方法或者类方法。
Objective-C 方法可以认为是至少有两个参数——self 和_cmd—— 的 C 函数。您可以通过 class_addMethod 方法将一个函数加入到类的方法中。例如,有如下的函数:
您可以通过 resolveInstanceMethod:将它作为类方法 resolveThisMethodDynamically 的实现:
在进入消息转发机制之前, respondsToSelector:和instancesRespondToSelector: 会被首先调用。您可以在这两个 方法中为传进来的选标提供一个IMP。如果您实现了resolveInstanceMethod:方法但是仍然希望正 常的消息转发机制进行,您只需要返回NO就可以了。
@dynamic propertyName; //表示编译器须动态地生成该属性对应地方法。
可以通过实现+ (BOOL) resolveInstanceMethod:和 + (BOOL)resolveClassMethod:来动态地实现给定选标 的对象方法或者类方法。
Objective-C 方法可以认为是至少有两个参数——self 和_cmd—— 的 C 函数。您可以通过 class_addMethod 方法将一个函数加入到类的方法中。例如,有如下的函数:
void dynamicMethodIMP(id self, SEL _cmd) { if ([selfs respondsToSelector:_cmd_]) { [selfs performSelector:_cmd_ withObject:object]; // implementation .... } // implementation .... }
您可以通过 resolveInstanceMethod:将它作为类方法 resolveThisMethodDynamically 的实现:
+ (BOOL)resolveInstanceMethod:(SEL)aSEL { if (aSEL == @selector(resolveThisMethodDynamically)) { class_addMethod([self class], aSEL, (IMP) dynamicMethodIMP, "v@:"); return YES; } return [super resolveInstanceMethod:aSEL]; }
在进入消息转发机制之前, respondsToSelector:和instancesRespondToSelector: 会被首先调用。您可以在这两个 方法中为传进来的选标提供一个IMP。如果您实现了resolveInstanceMethod:方法但是仍然希望正 常的消息转发机制进行,您只需要返回NO就可以了。
相关文章推荐
- ImageContainer重复添加,以及Map<String,Object>遍历
- Object类的方法
- Qt Meta Object system 学习
- Objective-C @encode关键字
- Online Object Tracking: A Benchmark 翻译
- salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
- Objective-C内存布局
- Objective-c NSData转NSString后为nil 的解决办法
- java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误
- 通过ObjectOutputStream序列化和使用ObjectInputStream反序列化
- iOS开发系列—Objective-C之Foundation框架
- makeObjectsPerformSelector用法
- android.support.v7.widget.RecyclerView$LayoutManager.canScrollVertically()’ on a null object 问题解决
- 并发编程(6)Object类对线程的操作(wait/notify/notifyAll)
- 【游戏客户端开发】 IOS开发——Swift和Objective-C交互时的一些注意点
- [Object-C] 多语言支持 繁体中文(台湾)不起作用
- object 定位 全屏 在浏览器中的问题
- Objective_C中block的使用
- 由String的内存分配了解Object和基础数据类型内存分配
- Object传入String类型和其他