tee*_*ink 109 objective-c
如果Objective-C中存在方法,我有什么办法可以测试吗?
我正在尝试添加一个警卫,以便在调用之前查看我的对象是否具有该方法.
ken*_*ytm 186
if ([obj respondsToSelector:@selector(methodName:withEtc:)]) {
[obj methodName:123 withEtc:456];
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*mpo 72
还有静态消息instancesRespondToSelector:(SEL)选择器 你可以像这样调用它:
[MyClass instancesRespondToSelector:@selector(someMethod:withParams:)]
Run Code Online (Sandbox Code Playgroud)
或者像这样:
[[myObject class] instancesRespondToSelector:@selector(someMethod:withParams:)]
Run Code Online (Sandbox Code Playgroud)
如果您想根据此调用一个构造函数或另一个构造函数(我的意思是,在拥有实例之前),这可能很有用.
Car*_*rum 12
使用respondsToSelector:.从文档:
respondsToSelector:
返回一个布尔值,指示接收器是实现还是继承可以响应指定消息的方法.
Run Code Online (Sandbox Code Playgroud)- (BOOL)respondsToSelector:(SEL)aSelector参数
aSelector - 标识消息的选择器.返回值
YES如果接收器实现或继承可以响应aSelector的方法,否则返回值NO.
你正在寻找respondsToSelector: -
if ([foo respondsToSelector: @selector(bar)] {
[foo bar];
}
Run Code Online (Sandbox Code Playgroud)
正如Donal所说,上面告诉你foo 肯定可以处理接收条形选择器.但是,如果foo是一个代理,它会转发bar以接收将接收条消息的某个底层对象,那么respondsToSelector:会告诉你NO,即使该消息将被转发到响应bar的对象.
| 归档时间: |
|
| 查看次数: |
45370 次 |
| 最近记录: |