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. electron vue 开发客户端程序

    文档知识点 https://electronjs.org/docs/tutorial/about (1)Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Ma ...

  2. vim自动保存折叠

    我经常使用的是手工折叠方式,就是 :set foldmethod=manual vim常用的折叠命令有: zf:折叠选定的行 zo:打开折叠 zR:打开所有折叠 zM:关闭所有折叠 zd:删除折叠 我 ...

  3. js自动补全空白列(即缺少td的列)

    //自动补全空白列 var rows = document.getElementById("gridTable").rows; //行对象 var allcells = rows[ ...

  4. java json与map互相转换(一)

      java json与map互相转换(一) CreationTime--2018年7月16日 Author:Marydon 1.准备工作 所需jar包:json-20180130.jar impor ...

  5. 【DB2】性能管理视图

    1.性能管理部分视图列表 可以使用命令db2 list tables for schema sysibmadm获取所有的性能管理视图 视图名称              模式名            ...

  6. Excel Vlookup 列查找函数

    列查找函数语法:vlookup(lookup_value,table_array,col_index_num,[range_lookup]) lookup_value:要查找的值,数值.引用或文本字符 ...

  7. Windows开发之VC++仿QQ迷你首页(迷你资讯)

    技术:VC++,MFC,WTL,,C++,Windows   概述 之前由于需求和兴趣,需要实现类似QQ迷你资讯首页的东西,看起来很酷,于是就写了个实现方案,主要还是基于WIndows C++ 和MF ...

  8. Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序

    发布时间:2018-11-16   技术:Android   概述 最近要做一个类似微信的,在登录界面选择国家地区的功能,微信有中文汉字笔画排序以及中文拼音排序等几种方式,如下所示: 简体中文 拼音排 ...

  9. linux线程学习

    按照书上写的,不知道为什么有问题: //已解决,参考最新的blog,哈哈 #include <stdlib.h> #include <pthread.h> #include & ...

  10. centos7 安装遇到的问题

    win7系统下安装centos7 1:首先是在U盘启动时候遇到的,Warning: /dev/root does not exist.没找到U盘的位置.这个问题两种方法,一种是去找到对应的设备名字 然 ...