静态方法 NSInvocation
Posted
技术标签:
【中文标题】静态方法 NSInvocation【英文标题】:static method NSInvocation 【发布时间】:2014-06-05 11:56:49 【问题描述】:是否可以使用 NSInvocation 进行静态方法调用?
我们使用 NSInvocation 来简化非公共方法的单元测试中的方法调用。
这对我们的实例方法非常有用,我们为此向 NSInvocation 提供对象和适当的数据。但是,我们可以对静态方法做同样的事情吗?
【问题讨论】:
Objective-C 中没有“静态方法”。有“类方法”,它们在运行时动态调度,而不是在编译时静态查找。 【参考方案1】:是的,你可以。假设你的类是MyClass
,你的方法是+(void)myClassMethod:(id)sender;
,你可以使用:
NSMethodSignature *signature = [MyClass methodSignatureForSelector:@selector(myClassMethod:)];
然后您可以在创建时将NSMethodSignature
提供给您的NSInvocation
:
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
【讨论】:
还要注意,类方法的target
应该是类对象。类似invocation.target = [MyClass class]
.以上是关于静态方法 NSInvocation的主要内容,如果未能解决你的问题,请参考以下文章
如何安全地测试一个方法是不是可以通过 NSInvocation 被调用
NSInvocation 将 C 数组传递给 Objective-C 方法
如何使用 @selector 和 NSInvocation 从另一个对象调用 NSManaged 对象的 @dynamic 方法?