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. ES6学习笔记八:类与继承

    一:Class ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类. 定义“类”的方法的时候,前面不需要加上function这个关键 ...

  2. 【Linux】&、&&、|、||的用法说明

    在Linux系统中,&.&&.|.||的用法如下: &  表示任务在后台运行,例如:ping 127.0.0.1>a.txt& &&  表 ...

  3. GDALBuildVRT异构波段的支持

    目录 简述 修改源码 1.修改DatasetProperty结构体 2.修改VRTBuilder::AnalyseRaster函数 3.修改VRTBuilder::CreateVRTNonSepara ...

  4. rpm基本命令参考

    水可载舟,亦可覆舟! 1. 介绍 在Linux操作系统中,常用的软件有RPM包软件包,src.rpm格式的软件包(源码),以源代码发布的软件包以及.bin格式软件包和绿色软件.如果采用.rpm格式的软 ...

  5. T550 HiDPI Ubuntu 16.04安装流水帐

    U盘安装 需要用Win32DiskImager刻录iso到U盘 输入法 安装时选择的是英文, 所以默认没有中文的输入法, 但是浏览中文网页是没问题的, 而且字体都正常. 在System Setting ...

  6. 基于Echarts的中国地图数据展示

    发布时间:2018-10-31   技术:javascript+html5+canvas   概述 基于echarts的大数据中国地图展示,结合API定制,开发样式,监听鼠标事件,实现带参数路由跳转等 ...

  7. CTF SQL注入知识点

    理解常用的登录判断 select * from user where username='admin' and password='123' 数据库元信息 infomation_schema 懂PHP ...

  8. leetcode770. Basic Calculator IV

    此题真可谓是练习编程语言的绝好材料 ! import java.util.*; class Solution { class Item { Map<String, Integer> var ...

  9. 魅族MX四核手机转让,二手淘宝上+hi-pda论坛结合使用成功已出

    2013-3-14 内容存档在evernote,笔记名"魅族MX四核手机转让,二手淘宝上+hi-pda论坛结合使用成功已出"

  10. 一台电脑存放多个git账户的多个rsa秘钥(转)

    如何在一个电脑上存储多个git账户生成的多份rsa秘钥,实现多个账户同时使用配置的情况?今天,不幸又再次遇到这个问题. 问题描述 公司最近在开发一款开源产品,项目被托管在github上,但是公司内部一 ...