iphone - objective-c 静态/类方法定义 - "static"和 "+"有什么区别?

标签 iphone objective-c methods static sdk

我想知道是否有人可以解释以下函数之间的区别。它们都是静态的,但需要不同的签名语法。我想知道这些在运行时是如何处理的,为什么要使用一个而不是另一个?

+ (int) returnInt:(NSString *)myString1 withString2:(NSString *)myString2
{
    if ([myString1 isEqualToString:myString2])
        return 1;
    else 
        return 0;
}

对比

static int returnInt(NSString *myString1, NSString *myString2)
{
    if ([myString1 isEqualToString:myString2])
        return 1;
    else 
        return 0;
}

谢谢!

最佳答案

不像在(比方说)C++ 中,静态成员函数只是类命名空间中的普通函数,Objective-C 有适当的类方法。

因为类是对象,所以调用类方法就像调用类的实例方法一样。这样做的主要后果是:

1) 调用类方法会产生轻微(尽管通常无关紧要)的开销,因为方法调用是在运行时解析的。

2) 类方法有一个隐含的“self”参数,就像实例方法一样。在他们的例子中,“self”是指向类对象的指针。

3) 类方法被子类继承。

一起,2 和 3 意味着你可以用类方法做这样的事情:

+ (id) instance
{
    return [[[self alloc] init] autorelease];
}

然后创建一个继承该方法的新类并返回其自身的新实例,而不是父类(super class)。

我相信将一个普通的 c 函数标记为静态只会使它对定义它的文件以外的文件不可用。如果你想制作一个只与一个类相关的辅助函数,你通常会这样做想避免污染全局命名空间。

关于iphone - objective-c 静态/类方法定义 - "static"和 "+"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4852300/

相关文章:

Java - 使用数组创建不同的方法

iphone - 如何在iPhone上录制像会说话的汤姆猫这样的屏幕视频?

iphone - 通用二进制文件不是对设备内存的巨大浪费吗?

iPhone:执行触摸操作时 NSTimer 会暂时停止?

iphone - 从 iPhone/Pad 音乐库中检测音乐视频

ruby - 未定义方法 `-' 对于 nil :NilClass (NoMethodError)

ios - 使用 XMPP 从 OpenFire 获取所有用户名

ios - 没有可见的@interface 'UIView' 声明选择器 'loadRequest'

iphone - 通过iPhone上的着色器处理视频时捕获视频

java - ActionListener(actionPerformed) 返回一些东西?