有人可以提供使用NSInvocation
的具体原因,而不仅仅是使用Block甚至常规方法调用吗?我在Web上发现NSInvocation
的描述,但没有关于在哪里使用至关重要甚至唯一的好选择的示例。
最佳答案
NSInvocations和block都可以用于封装方法调用,以及直到运行时才定义的参数和接收器。在存在块之前,NSInvocation是执行此操作的唯一方法。如果这是您需要做的所有事情,那么块是一个更好的选择。最近,NSInvocation的使用非常少见。
但是,与可以代表任何数量的代码以及捕获的值的块不同,NSInvocation始终代表单个方法调用。
这具有一些优点:
与不透明的块不同,可以查询NSInvocation以获得选择器,接收器,参数和被调用方法的签名。如果您收到NSInvocation作为方法的参数(与NSObject的-forwardInvocation
一样),则可以提取参数并调用另一个方法。
可以使用-initWithMethodSignature:
在运行时为任意方法调用构造NSInvocation。例如,如果要为Objective-C实现eval()
函数,则可以使用NSInvocation实际调用方法。
关于cocoa-touch - 为什么要使用NSInvocation而不是Block?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23254496/