关闭

NSInvocation 注意事项

标签: iosios开发手机
200人阅读 评论(0) 收藏 举报
分类:


       在利用NSInvocation对方法进行包装时遇到了一点小坑。我们平时再做开发时可以利用NSInvocation对象对我们的方法进行一次包装回调。

<span style="font-size:18px;">//方法签名(方法的描述)
    NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:selector];</span>

<span style="font-size:18px;">//利用一个NSInvocation对象包装一次方法调用(方法调用者、方法名、方法的参数、方法返回值)
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
    invocation.target = self;//回调对象
    invocation.selector = selector;//回调方法</span>


重点是在对NSInvocation对象在进行参数设置时遇到了大坑。NSInvocation对象的setArgument: atIndex: 方法在设置参数是atIndex的0和1已经被系统占用所以我们最多只能从2开始指定包装方法的参数值和对应的参数索引。[invocation setArgument:&object atIndex:i + 2];


//调用方法
    [invocation invoke];

如果包装发方法有返回值可以在方法签名中获取。可以更具signature.methodReturnLength返回值的长度来确定包装方法返回值的类型。也可以使用signature.methodReturnType来获取包装方法的放回类型。


获取返回值:[invocation getReturnValue:&returnValue];




0
0
查看评论

NSInvocation、NSMethodSignature 的介绍及使用

在 iOS中可以直接调用 某个对象的消息 方式有2种 一种是performSelector:withObject: 再一种就是NSInvocation 第一种方式比较简单,能完成简单的调用。但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定。那么在这种情况下...
  • dztianyu
  • dztianyu
  • 2014-01-03 16:22
  • 3376

NSInvocation动态调用任意block

http://www.wtoutiao.com/p/i7bspr.html 我们知道常规的block调用都是硬编码写死,参数类型必须在编译时匹配,编译器会转换成struct与C函数指针,比如下代码: 会被编译为: 假设我写这样的代码,则会出现编译错误: id anyB...
  • jeffasd
  • jeffasd
  • 2016-06-03 07:31
  • 533

NSInvocation简单用法

NSInvocation简单用法
  • lvdezhou
  • lvdezhou
  • 2016-02-16 14:50
  • 653

NSInvocation的基本使用

一. NSInvocation简介 在iOS开发中,可以直接调用方法的方式有两种:performSelector:withObject: 和 NSInvocation。 performSelector:withObject:使用简单,但缺点是只能传一个参数,大于2个参数就无法使用;NSInvoc...
  • SSIrreplaceable
  • SSIrreplaceable
  • 2016-11-28 12:20
  • 2243

解决: void SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:requ

void SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request: 解决这个问题的方法: - (void)dealloc {   &...
  • AckyiOSDeveloper
  • AckyiOSDeveloper
  • 2016-05-30 10:38
  • 5473

使用NSInvocation 调用实例的方法,且等待获得返回值

    OBJCExternInterface * ibjInter = [[OBJCExternInterface alloc] init]; //定义类的实例   &...
  • nitghost
  • nitghost
  • 2009-01-08 10:41
  • 3538

关于NSInvocation-Tagert事件的多个参数实现方法

main.h [html] view plaincopy #import Foundation/Foundation.h>   #import "MyClass.h"   ...
  • shang1219178163
  • shang1219178163
  • 2015-01-12 17:48
  • 473

NSInvocation在获取返回值后crash问题

在使用NSInvocation的过程中,遇到一个问题。
  • zengconggen
  • zengconggen
  • 2014-07-21 21:56
  • 3769

OC-NSInvocation的简单运用

这篇文章摘要介绍了OC-NSInvocation的概念、作用、它使用步骤及使用时的注意事项,并给出了比较详细的范例。
  • LSL_LSL1314
  • LSL_LSL1314
  • 2015-08-25 22:07
  • 494

NSInvocation传递多个参数

// // ViewController.m // Invocation // // Created by hq on 16/4/19. // Copyright © 2016年 hanqing. All rights reserved. // #import "Vie...
  • baohanqing
  • baohanqing
  • 2016-04-19 17:24
  • 586
    个人资料
    • 访问:12228次
    • 积分:393
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类