动态实现Objective-C中属性(Property)的方法

要动态实现OC属性方法需要在类的实现中用@dynamic修饰
@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就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值