从Objective C中的另一个类动态调用方法

时间:2012-12-18 07:21:40

标签: objective-c objective-c-category

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

示例:

  1. 我有一个名为Source1.h/Source1.m的文件(两者都是客观的C类文件)
  2. 我有另一个文件名Source2.h/Source2.m(两者都是客观的C类文件)
  3. Source1包含两种方法,例如:method1method2
  4. Source2文件中,我需要从method1文件中调用source1
  5. 我知道如何在目标C中执行此操作。但在我的source2文件中,Source1中的方法名称将被动态检索。我不打算用类似的东西对它进行硬编码。

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

    method1文本将从文本文件中获取。我可以使用Selector从同一个类调用一个方法。但我不能使用selector从另一个类调用方法。

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

    非常感谢......

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你可以这样做:

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);