关于 NSInvocation
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的更多相关文章
- Objective-C中NSInvocation的使用
OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation. 第一个PerformaceSelector比较常 ...
- iOS开发——网络篇——UIWebview基本使用,NSInvocation(封装类),NSMethodSignature(签名),JavaScript,抛异常,消除警告
一.UIWebView简介 1.UIWebView什么是UIWebViewUIWebView是iOS内置的浏览器控件系统自带的Safari浏览器就是通过UIWebView实现的 UIWebView不但 ...
- NSInvocation
NSInvocation 基本简介 NSInvocation是一个静态描绘的OC消息,也就是说,它是一个动作,这个动作可以变成一个对象.NSInvocation对象在对象和对象之间和应用程序和应用程序 ...
- IOS NSInvocation用法简介
IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...
- NSInvocation Basics
In this article I'm going to cover the basics and usages of NSInvocation. What is NSInvocation? Appl ...
- NSInvocation的使用(转)
转载自:http://www.cnblogs.com/pengyingh/articles/2359199.html http://blog.iosxcode4.com/?p=125 在 iOS中可以 ...
- ios NSMethodSignature and NSInvocation 消息转发
1.首先获取消息转发时连个函数内部具体内容 MARK:这里是拿[@"xxxxx" length]调用拿来举例说明 (lldb) po signature <NSMethodS ...
- 利用NSInvocation对方法进行抽象,实现对方法的加锁
我们在实际开发中须要对离散的方式加锁实现线程安全,当然我们有多种实现方式,这仅仅是当中一种,使用起来比較方便 + (id)performSelectorWithTarget:(id)target se ...
- iOS NSInvocation的学习
用途: NSInvocation的作用和performSelector:withObject:的作用是一样的:用于iOS编程中调用某个对象的消息. performSelector:withObject ...
- 第16月第8天 NSInvocation存储 函数指针 va_arg lldb
1.NSInvocation存储 -(void)setInvok:(id)target sel:(SEL)sel key:(id)key { if(!target) return; NSMethodS ...
随机推荐
- String的一些方法试探
package countio; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; impo ...
- Git客户端安装
Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具; 保存点 : Git的保存点可以追踪源码中的文件, 并能得到某一个时间点上的整个工程项目额状态 ...
- Aerospike系列:5:安装AMC
1:需要安装的包,如果缺少,请安装. python (2.6+) gcc python-devel 安装相应的模块 sudo pip install markupsafe sudo pip insta ...
- 来自Unix/Linux的编程启发录
本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布重点内容 2017年第一篇文章,祝各位好友新年快乐. 年前因为不小心坐到了自己左手大拇指导致轻微的骨裂,没有按时更新,实在是羞愧.今年 ...
- iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示
文本将会实现把数据存储到plist文件里.然后在程序中进行读取.在TableView控件中依据不同的类别显示Section. 有关TableView 的其它实现,请參考<iOS项目开发实战--学 ...
- VBA遍历数组的2种方式
1.情景展示 VBA编程,如何对数组进行遍历? 2.解决方案 方式一:使用for循环 Sub 遍历数组1() '声明一个变量 Dim Arr As Variant '声明一个数字变量 Dim i ...
- sevlet的url-pattern设置
url-pattern的值,表示访问对应servlet的地址: 默认servlet的访问路径:http://localhost:8080/项目名称/Sevlet名称 如果不使用这种方式的话,可以使用自 ...
- redmine3.3基于bitnami集成快速安装
形而上学,此景此情,古今一般同!好的东西,逢人喜!redmine在当下还是不错的. 源码安装redmine,相对复杂基于ruby运行的!化繁为简实!追究极致万物! 00.环境及软件说明 bitnami ...
- (原)InsightFace及其mxnet代码
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/8525287.html 论文 InsightFace : Additive Angular Margin ...
- nginx端合并JS
转载于:http://www.tuicool.com/articles/IjMNnq 配置文件: location /static/css/ { concat on; concat_max_files ...