我正在开发一个项目,我有一个UIView属性的类.我还定义了一个类,它是一个UIView定义某个方法的子类.如果我有以下代码,我在构建时会收到警告:
// In this example, myView is UIView property which *may* contain a UIView or
// my subclassed-UIView which has the myMethod method
if([myView respondsToSelector:@selector(myMethod)]){
[myView myMethod]
}
Run Code Online (Sandbox Code Playgroud)
警告是"UIView可能无法响应'-myMethod'".警告显然不能阻止应用程序的构建,但我只想弄清楚如何处理它.这是正确的方法吗?有办法停止这个警告吗?
警告仅仅是因为编译器不知道该视图是否是您的自定义子类.当然,在运行时它会正常工作,因为它将是一个子类.您有两种方法可以解决它:
[myView performSelector:@selector(myMethod)];
Run Code Online (Sandbox Code Playgroud)
(因此编译器根本不检查方法调用)
或更好:
[(MyViewClass *)myView myMethod];
Run Code Online (Sandbox Code Playgroud)
这样编译器就好像对象确实是你的视图子类(当然你执行检查之后).
就此而言,检查您的类而不是方法可能是有意义的:
if ([myView isKindOfClass:[MyViewClass class]]) { ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |