ARC语义问题中的NSClassFromString()"没有已知的选择器实例方法' xxx:

时间:2017-11-03 05:57:38

标签: objective-c xcode automatic-ref-counting

代码:[NSClassFromString(@"Test") gotoTest];

  • 使用带错误的ARC:No known class method for selector 'gotoTest'

  • 但在MRC警告中没有错误。

来自警告的方式ARC成为错误?你有什么参考吗?我想知道根本原因。

1 个答案:

答案 0 :(得分:0)

您未在MRC下包含警告:

  

未找到类方法'+ gotoTest'(返回类型默认为'id')

这包含一个重要线索 - 编译器正在寻找返回类型。在MRC下,它假定为id,并允许您将结果指定为对象引用。如果你陷入困境并且返回类型是float,那么事情可能会出错。

在ARC下,编译器的工作是对任何返回值进行内存管理,要正确执行此操作,需要使用该类型。因此,如果它无法确定返回类型,则会产生错误。

您的代码片段表明您知道选择器不带参数并且不返回任何值,因此请将其声明为此类。如果您没有使用该方法的课程,则可以使用协议,例如:

@protocol GotoTest
   + (void) gotoTest;
@end

会做的。现在编译器知道类型,你的代码将在ARC下编译。

HTH