IOS NSInvocation应用与理解
2023-09-14 08:59:45 时间
IOS中有一个类型是SEL,它的作用很相似与函数指针,通过performSelector:withObject:函数可以直接调用这个消息。但是perform相关的这些函数,有一个局限性,其参数数量不能超过2个,否则要做很麻烦的处理,与之相对,NSInvocation也是一种消息调用的方法,并且它的参数没有限制。这两种直接调用对象消息的方法,在IOS4.0之后,大多被block结构所取代,只有在很老的兼容性系统中才会使用,简单用法总结如下:
一、初始化与调用
在官方文档中有明确说明,NSInvocation对象只能使用其类方法来初始化,不可使用alloc/init方法。它执行调用之前,需要设置两个方法:setSelector: 和setArgument:atIndex:
//创建一个函数签名,这个签名可以是任意的,但需要注意,签名函数的参数数量要和调用的一致。
NSMethodSignature * sig = [NSNumber instanceMethodSignatureForSelector:@selector(init)];
注意:签名函数的参数数量要和调用函数的一致。测试后发现,当签名函数参数数量大于被调函数时,也是没有问题的。
调用多参数的方法,我们可以这样写:
NSMethodSignature * sig = [[self class] instanceMethodSignatureForSelector:myMethod];
注意:1、这里设置参数的Index 需要从2开始,因为前两个被selector和target占用。下面这样写也没有任何问题:
NSMethodSignature * sig = [[self class] instanceMethodSignatureForSelector:myMethod];
二、NSInvocation的返回值
NSInvocation对象,是可以有返回值的,然而这个返回值,并不是其所调用函数的返回值,需要我们手动设置:
NSMethodSignature * sig = [[self class] instanceMethodSignatureForSelector:myMethod];
三、关于内存
可以注意到- (void)retainArguments;这个方法,它会将传入的所有参数以及target都retain一遍。
iOS 10 中的 NSPersistentContainer 本文讲的是iOS 10 中的 NSPersistentContainer,我们也接收以 NSPersistentContainer 形式的简化版的 Core Data stack,它为我们做了大部分的准备工作。它值得我们去尝试么?让我们开始深入挖掘这些新特性吧。
相关文章
- 微信推出图片大爆炸功能;简洁优雅的软件早已是明日黄花;谷歌为 iPhone 用户带来“iOS换Android”应用 | EA周报
- iOS开发- 打包ipa,让别人设备安装你的App
- HBuilder中将项目运行到IOS APP基座
- ios发布证书用于上架app_腾讯新闻
- iOS应用签名(上)
- 用windows或linux系统 可以上传ios app到苹果应用商店吗?
- iOS__上传应用到AppStore出现Authenticating with the iTunes store
- 2022年ios最新申请流程
- iOS编译过程的原理和应用详解手机开发
- iOS UITableView 拖动排序的实现详解手机开发
- iOS 动画退出应用代码详解手机开发
- iOS NSFileManeger 计算文件是否超时,和计算文件夹下文件的总大小详解手机开发
- iOS获取设备信息详解手机开发
- IOS—静态方法(类方法)和实例方法详解手机开发
- ios基础:iOS改变状态栏字体颜色详解手机开发
- Linux下开发iOS应用:挑战还是机会?(linux做ios开发)
- MacOS 与 iOS:由浅入深的连接(macos和ios)
- 操作系统比较:iOS 与 Linux 操作系统(ios与linux)
- Linux与iOS:越来越亲密的合作伙伴(linux与ios)
- iOS 14.5现已发布 新增Face ID便捷解锁和应用跟踪透明化功能
- iOS 15界面曝光:安卓味儿越来越浓
- 把 Linux 安装到 iOS 设备上的步骤(ios安装linux)
- 为什么“我”只给iOS做了应用?
- 谁说 iOS 就不适用Oracle(ios oracle软件)
- Reddit为iOS客户端引入类似TikTok的短视频内容