如何从Objective C中的其他类调用方法

时间:2015-01-19 02:49:17

标签: objective-c

我是一名学习目标C的C / Perl / Unix人员。我有一个简单的OS X应用程序,我创建了两个类。如何从另一个类中的方法调用一个类的方法?

到目前为止,我写了简单的"概念证明"应用程序,在单个类中创建实例方法,以及简单的main.m:

MyClass.m

    #import "MyClass.h"
    @implementation MyClass
    - (NSString *) methodName {
    ...some code here...
    }

的main.m

#import "MyClass.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        MyClass *myClass = [[MyClass alloc] init];
        NSString *page;
        page = [myClass methodName];

我从main.m初始化类,它作为一个简单的测试平台。这对学习如何编写简单的类和方法很好。

现在我已经创建了两个类,第二个是我想要在第一个类中进行解析的字符串方法的集合。这些方法返回子字符串,如果给定字符串中存在子字符串,则返回TRUE / FALSE。

如何从另一个类中调用这些子字符串方法?我需要使用类方法吗?我是否需要将初始化从main.m移动到每个类以允许看到类?

正如我所提到的,我是一名C程序员,但是实例/类方法和类的范围对我来说仍然是新的...任何建议或指向文档的指针(Apple或第三方)都是受欢迎的。

2 个答案:

答案 0 :(得分:1)

在面向对象的编程中,类将数据和代码组合在一起。它就像一个也有方法的结构。

如果方法不依赖于对象的状态,则它可以是类方法。在这种情况下,您只是将该类用作该方法可以存在的一种命名空间。如果所有方法都是类方法,则永远不需要实例化类。 (即你不需要[[StringHelpers alloc] init])。

那么......你的第二堂课有数据吗?

如果没有,只需制作方法类方法即可。然后你可以这样做:

#import <StringHelpers.h>

[StringHelpers hasSubstring:myOtherString];

答案 1 :(得分:0)

假设您的新类名为StringUtility,您可以执行以下操作:

  1. 将StringUtility类中的方法声明为&#39;类方法&#39;。这意味着您向类本身发送消息,而不是类的特定实例。为此,只需在+-的方法声明开头使用StringUtility.h而不是StringUtility.m定义这些方法。然后你可以这样调用这些方法:

    + (NSString *) awesomeTransformationForString:(NSString *)aString
    {
    NSString * newString = ... // code for your transformation that does something to aString here.
    return newString
    }
    

    然后,实际使用类方法:

    NSString * myString = @"My string for awesomeifying.";
    NSString * transformedString = [StringUtility awesomeTransformationForString:mystring];
    
  2. 如果StringUtility类中的方法需要使用它们在调用它们之间存储的信息,为了确定如何对传递它们的对象进行操作,那么它们需要是&#39;实例方法&#39 ;.这意味着您创建该类的实例并与之通信:

    - (NSString *) awesomeTransformationForString:(NSString *)aString
    {
    NSString * newString = ... // code for your transformation that does something to aString here.
    return newString
    }
    

    然后实际使用实例方法:

    NSString * myString = @"My string for awesomeifying.";
    StringUtility * myStringUtility = [StringUtility new];
    NSString * transformedString = [myStringUtility awesomeTransformationForString:mystring];
    
  3. 请注意,没有什么可以阻止您的类包含类方法和实例方法。您只需向类消息传递类方法,并为实例方法传递实例。有时,您可能希望在实例中向对象自己的类发送类方法。只需像在其他任何地方一样使用[StingUtility methodName]