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