Invocation   调用的意思。

可想而知NSInvocation 是一个 方法调用 封装的类。

这体现了  面向对象的思想, 及一切皆对象。函数也不例外。

一般编程中,应该很少用到这个。 但是要编写 抽象度高的 框架,或 代码。 这个是必不可少的。

跟 c# , java 里的 反射 类似 。 动态访问 和 调用方法。

下面介绍下简单使用。。

用之前可以先 自己想下。如果让你 来 封装一个函数 作为一个类 ,都需要什么。

funObj  函数 对象

funObj 属性

funObj 行为(方法fun)

首先属性,需要 函数的一个描述:

{

1,唯一标示 一个函数

2,函数 在 程序里的 调用指针。

}

函数的参数:

{

arg 1

arg 2

}

函数的返回值:

{

returnValue

}

函数的调用对象

{

要调用方法的外部对象。

}

其次   函数对象的行为(fun)

{

有了足够多的信息后,我们就可以 拿到 外部调用对象 去 内存里找 函数的调用地址, 加上函数参数、返回值。 来调用函数。

}

以上这些,在面向对象的语言里 可能已经为我们封装了,OC 中的NSInvocation 就是。

对于调用一个 有两个参数以上的   函数,我们可以这样:

-( id )fun :(id) a :(id)b ......{

}

[self    fun:a : b .....]; //很简单啊。这是在确定的情况下。不确定呢,

使用

[self performSelector:@selector() withObject: .....];

很遗憾 只能传递一个参数, 除非你把 a,b 参数放倒一个  集合中。 

使用NSInvocation 
-(NSString *)customMethod:(NSString *)arg1 otherArg:(NSString *)arg2{

    return [NSString stringWithFormat:@"%@%@",arg1,arg2];

}

    SEL customSel = @selector(customMethod: otherArg:);

    NSMethodSignature * customSig = [self methodSignatureForSelector:customSel];

    NSInvocation *customInvocation =  [NSInvocation  invocationWithMethodSignature:customSig ];
NSString *arg1 = @"NS";
NSString *arg2 = @"Invocation"; [customInvocation setTarget:self];
[customInvocation setReturnValue:@encode(NSString)]; [customInvocation setSelector:customSel];
[customInvocation setArgument:&arg1 atIndex:];
[customInvocation setArgument:&arg2 atIndex:]; [customInvocation invoke];

SEL customSel = @selector(customMethod: otherArg:);

 

关于 NSInvocation的更多相关文章

  1. Objective-C中NSInvocation的使用

    OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation. 第一个PerformaceSelector比较常 ...

  2. iOS开发——网络篇——UIWebview基本使用,NSInvocation(封装类),NSMethodSignature(签名),JavaScript,抛异常,消除警告

    一.UIWebView简介 1.UIWebView什么是UIWebViewUIWebView是iOS内置的浏览器控件系统自带的Safari浏览器就是通过UIWebView实现的 UIWebView不但 ...

  3. NSInvocation

    NSInvocation 基本简介 NSInvocation是一个静态描绘的OC消息,也就是说,它是一个动作,这个动作可以变成一个对象.NSInvocation对象在对象和对象之间和应用程序和应用程序 ...

  4. IOS NSInvocation用法简介

    IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...

  5. NSInvocation Basics

    In this article I'm going to cover the basics and usages of NSInvocation. What is NSInvocation? Appl ...

  6. NSInvocation的使用(转)

    转载自:http://www.cnblogs.com/pengyingh/articles/2359199.html http://blog.iosxcode4.com/?p=125 在 iOS中可以 ...

  7. ios NSMethodSignature and NSInvocation 消息转发

    1.首先获取消息转发时连个函数内部具体内容 MARK:这里是拿[@"xxxxx" length]调用拿来举例说明 (lldb) po signature <NSMethodS ...

  8. 利用NSInvocation对方法进行抽象,实现对方法的加锁

    我们在实际开发中须要对离散的方式加锁实现线程安全,当然我们有多种实现方式,这仅仅是当中一种,使用起来比較方便 + (id)performSelectorWithTarget:(id)target se ...

  9. iOS NSInvocation的学习

    用途: NSInvocation的作用和performSelector:withObject:的作用是一样的:用于iOS编程中调用某个对象的消息. performSelector:withObject ...

  10. 第16月第8天 NSInvocation存储 函数指针 va_arg lldb

    1.NSInvocation存储 -(void)setInvok:(id)target sel:(SEL)sel key:(id)key { if(!target) return; NSMethodS ...

随机推荐

  1. wwindows文件放入linux后多出换行符

    将 windows文件移到linux系统下会在文件行末尾多了一个换行符^M 使用命令cat -v tmp.c可以看到每行后边有^M字符 为了解决这个问题,我们用如下命令:touch love_tmp. ...

  2. ORA-01940: 无法删除当前连接的用户

    删除用户报错 SQL> drop user ODI_SRC CASCADE; drop user ODI_SRC CASCADE * 第 1 行出现错误: ORA: 无法删除当前连接的用户 查看 ...

  3. windows能连网络,可是打不开网页,出现无法解析server的DNS

    首先,我想先说作为一名刚学完计算机网络课的学生,并且还完毕了学校的号称和斯坦福一个难度级别的网络实验之后.我觉得自己对于计算机网络还是勉强入门了.对于各种之前仅仅是听过的各种tcp.http.路由器. ...

  4. Artistic Style在windows下的使用(C/C++)

    ArtisticStyle是一个开源的源码格式化工具.主页地址为:http://astyle.sourceforge.net/,它能够应用在C.C++.Objective-C.C#.Java等程序语言 ...

  5. java 获取文件后缀名(文件类型)

      java 获取文件后缀名(文件类型) CreateTime--2018年5月23日09:16:31 Author:Marydon // 获取文件名的后缀名(文件类型) String oldFile ...

  6. SpringBoot常用属性配置

    SpringBoot 2.x:https://github.com/spring-projects/spring-boot/blob/2.0.x/spring-boot-project/spring- ...

  7. django生成文件txt、pdf(在生成 PDF 文件之前,需要安装 ReportLab 库)

    from django.http import HttpResponse def download_file(request): # Text file #response = HttpRespons ...

  8. 编译安装imagick出错:make: *** [imagick_class.lo] Error 1

    /usr/local/lnmpsrc/imagick-3.0.1/imagick_class.c:9673: warning: assignment makes pointer from intege ...

  9. Ubuntu x86-64汇编(6)

    寻址方式 Addressing Modes 地址和值 Addresses vs Values 在64bit架构中, 地址是64bit. 访问内存内容的唯一方式就是通过方括号, 不加方括号读取的只是地址 ...

  10. 内存问题排查工具 --- valgrind

    1. 概述 2. Valgrind 3. 内存泄漏监测 3.1. 示例代码 3.2. 编译它 3.3. 用Valgrind监测进程的内存泄漏 4. 悬挂指针 4.1. 示例代码 4.2. Valgri ...