NSInvocation 理解
说明
类说明
作为一个呈现Objective-C消息的对象。
类申明
@interface NSInvocation : NSObject
简介
NSInvocation对象用于在对象之间和应用程序之间存储和转发消息,主要是通过NSTimer对象和分布式对象系统。一个NSInvocation对象调用对象包含Objtovi-C消息的所有元素:目标、selector、参数和返回值。这些元素都可以直接设置,返回值在NSInvocation对象被调度。
NSInvocation对象可以被多次分派到不同的目标;它的参数可以在不同结果的调度之间进行修改;甚至它的选择器也可以用相同的方法签名(参数和返回类型)更改为另一个。这种灵活性使NSInvocation调用用于重复具有许多参数和变量的消息;而不是为每个消息重新键入稍微不同的表达式,而是修改NSInvocation在需要将对象调度到新目标之前,每次都需要它。
NSInvocation不支持具有可变数量的参数的方法调用。联盟论据。你应该使用invocationWithMethodSignature:创建类方法NS调用对象;不应使用这些对象创建alloc和init .
默认情况下,此类不保留包含调用的参数。如果这些对象在创建实例的时间之间可能消失NSInvocation当您使用它时,您应该自己显式地保留这些对象,或者调用保持论据方法使调用对象自己保留调用对象。
NSInvocation符合NSCoding协议,但仅支持由NSPortCoder .NS调用不支持归档。
使用
调用与方法签名
返回一个NSInvocation对象,该对象能够使用给定的方法签名构造消息。
+ (NSInvocation *)invocationWithMethodSignature:(NSMethodSignature *)sig;
参数
- signature 封装方法签名的对象
配置调用对象
selector
@property SEL selector;
接收器的选择器,如果尚未设置,则为0。
target
@property (nullable, assign) id target;
接收器的目标,如果接收器没有目标,则为零。
setArgument:atIndex:
- (void)setArgument:(void *)argumentLocation atIndex:(NSInteger)idx;
设置接收器的参数。
getArgument:atIndex:
- (void)getArgument:(void *)argumentLocation atIndex:(NSInteger)idx;
通过间接方式返回指定索引处接收器的参数
argumentsRetained
@property (readonly) BOOL argumentsRetained;
如果接收者保留了自己的论点,则为“是”,否则为“否”。
retainArguments
- (void)retainArguments;
如果接收器尚未这样做,则保留接收器的目标参数和所有对象参数,并复制其所有C字符串参数和块。如果设置了returnvalue,则也会保留或复制它。
setReturnValue:
- (void)setReturnValue:(void *)retLoc;
getReturnValue:
- (void)getReturnValue:(void *)retLoc;
获取接收器的返回值。
优势
在iOS 中可以直接调用某个对象的消息的方法有两种
- performSelector:这种类型的方法最多只能有两个参数
- NSInvocation:它可以设置多个参数
使用
参考《NSInvocation使用》