【问题标题】:Dynamically call a method from another class in Objective C在 Objective C 中动态调用另一个类的方法
【发布时间】:2014-05-08 19:54:28
【问题描述】:

我正在尝试从另一个源文件中的另一个类调用一个方法。

例子:

  1. 我有一个名为Source1.h/Source1.m 的文件(都是客观C 类文件)
  2. 我还有另一个文件名Source2.h/Source2.m(都是客观C类文件)
  3. Source1 包含 2 个方法,例如:method1method2
  4. Source2文件,我需要从source1文件调用method1

我知道如何在目标 C 中做到这一点。但是在我的 source2 文件中,Source1 中的方法名称将被动态检索。我不会硬编码一些类似的东西。

Source1 *a = [[Source1 alloc]init];

[a method1];

method1 文本将取自文本文件。我可以使用 Selector 从同一个类中调用一个方法。但是我不能使用选择器来调用另一个类的方法。

请帮忙解决这个问题....

非常感谢......

【问题讨论】:

    标签: objective-c objective-c-category


    【解决方案1】:

    这个答案似乎是相关的:How can I dynamically create a selector at runtime with Objective-C?

    基本上,您可以使用 NSSelectorFromString 从 NSString 中的 UTF8 字符串创建选择器。

    【讨论】:

      【解决方案2】:

      你可以这样做:

      MyClass 包含名为myMethod 的方法,该方法是从某个其他类调用的。

      MyClass *object=[MyClass new];
      
      SEL mySelector=NSSelectorFromString(@"myMethod"); //myMethod is a string, that you can read from any text file/source file and use it here.
      

      //以下将在ARC中创建警告,您可以通过添加这些来抑制警告

      #pragma clang diagnostic push
      #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
          [object performSelector:mySelector];
      #pragma clang diagnostic pop
      

      其他方法是这样做:

      #import <objc/message.h>//This is required to import
      

      然后通过以下代码调用该方法:

      MyClass *object=[MyClass new]; 
      SEL mySelector=NSSelectorFromString(@"myMethod");
      objc_msgSend(object,mySelector);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 2015-08-01
        • 2015-07-10
        • 2013-03-05
        • 1970-01-01
        相关资源
        最近更新 更多