【发布时间】:2017-11-03 05:57:37
【问题描述】:
代码:[NSClassFromString(@"Test") gotoTest];
使用 ARC 时出现错误:
No known class method for selector 'gotoTest'但在 MRC 警告中没有错误。
ARC 从警告变成错误的方式?你有什么参考吗?我想知道本质原因。
【问题讨论】:
标签: objective-c xcode automatic-ref-counting
代码:[NSClassFromString(@"Test") gotoTest];
使用 ARC 时出现错误:No known class method for selector 'gotoTest'
但在 MRC 警告中没有错误。
ARC 从警告变成错误的方式?你有什么参考吗?我想知道本质原因。
【问题讨论】:
标签: objective-c xcode automatic-ref-counting
您没有在 MRC 下包含警告:
找不到类方法'+gotoTest'(返回类型默认为'id')
这包含一个重要的线索——编译器正在寻找返回类型。在 MRC 下,它假定 id 并允许您将结果分配为对象引用。如果你搞砸了并且返回类型是float,那么事情可能会出错。
在 ARC 下,编译器的工作是对任何返回值进行内存管理,并且要正确地做到这一点,它需要类型。因此,如果它无法确定返回类型,则会产生错误。
您的代码片段表明您知道选择器不接受任何参数并且不返回任何值,因此将其声明为这样。如果您没有使用该方法的类,则可以使用协议,例如:
@protocol GotoTest
+ (void) gotoTest;
@end
会的。现在编译器知道类型并且您的代码将在 ARC 下编译。
HTH
【讨论】: