IMP功能报错的解决

      今天优化一个缓存函数,缓存读写在项目中出现的非常频繁,正好之前看到autorelease采用了IMP caching机制,即在项目初始化时就绑定了selector、class和IMP,使得函数运行速率提升,于是想把IMP caching机制也运用到缓存函数上。

       原来的函数调用是这样的:

NSData *data = [WBRequestCache  cacheForURL:url];

      函数通过URL获取缓存中存储的数据。

  现在的做法是先在项目初始化时就绑定相关的selector、class和IMP:

    id cache_class = [WBRequestCache class];
    SEL write_sel = @selector(cacheForURL:);
    IMP write_imp = [cache_class methodForSelector:write_sel];

  那么新的读取数据的方法为:

- (NSData *)newMethodCacheForURL:(NSURL *url){
     return write_imp(cache_class,write_sel,url);
}

    但是,出现了(IMP)Too many arguments to function call, expected 0, have 3的错误,随后写了几个小demo,发现IMP的方法全都会出现这样的错误,应该是编译器的问题,需要将下图标蓝的位置改为NO:

   网上许多调用objc_msgsend方法也出现了这个问题,也是在这个地方更改,看报告问题的相应时间都是在2015年1月前后,应该之前这个值默认是NO,在15年年初的一个xcode版本升级中改成的YES。

转载于:https://www.cnblogs.com/Kelphizy/p/4552496.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值