【问题标题】:NSClassFromString() in ARC semantic issue "No known instance method for selector 'xxx:ARC语义问题中的NSClassFromString()“选择器'xxx没有已知的实例方法:
【发布时间】: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


    【解决方案1】:

    您没有在 MRC 下包含警告:

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

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

    在 ARC 下,编译器的工作是对任何返回值进行内存管理,并且要正确地做到这一点,它需要类型。因此,如果它无法确定返回类型,则会产生错误。

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

    @protocol GotoTest
       + (void) gotoTest;
    @end
    

    会的。现在编译器知道类型并且您的代码将在 ARC 下编译。

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多