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