我想知道是否有人可以解释下面这些功能之间的区别。它们都是静态的,但需要不同的签名语法。我想知道这些是如何在运行时处理的,以及为什么你要使用一个而不是另一个?
+ (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;
}
谢谢!
答案 0 :(得分:11)
与(比如)C ++不同,静态成员函数只是类'命名空间中的普通函数,而Objective-C有适当的类方法。
由于类是对象,因此调用类方法实际上就像在类上调用实例方法一样。其主要后果是:
1)调用类方法会产生轻微(虽然通常无关紧要)的开销,因为方法调用是在运行时解决的。
2)类方法有一个隐含的“自我”参数,就像实例方法一样。在他们的例子中,'self'是指向类对象的指针。
3)类方法由子类继承。
在一起,2和3意味着你可以用类方法做这样的事情:
+ (id) instance
{
return [[[self alloc] init] autorelease];
}
然后创建一个继承该方法的新类,并返回一个新的自身实例,而不是超类。
我相信标记一个普通的c函数static只会使它不能被定义的文件以外的其他文件。如果你想创建一个只与一个类相关的辅助函数,你通常会这样做。我想避免污染全局命名空间。