Objective-c中+和 - 方法之间的区别

时间:2010-02-10 16:44:38

标签: iphone objective-c cocoa

使用 - 声明的方法和使用+

声明的方法之间有什么区别

e.g

- (void)methodname

+ (void)methodname

5 个答案:

答案 0 :(得分:46)

前缀为-的方法是实例方法。这意味着它们只能在类的实例上调用,例如:

[myStringInstance length];

前缀为+的方法是类方法。这意味着可以在类上调用它们,而无需实例,例如:

[NSString stringWithString:@"Hello World"];

答案 1 :(得分:2)

减去实例方法(只能通过实例化对象访问)

plus是类方法(比如Java Math.abs(),你可以在没有即时对象的情况下使用它)

答案 2 :(得分:2)

+(void)methodname是一个类变量,-(void)methodname是对象变量。

让我们假设您创建了一个具有反向字符串方法的实用程序类。你称之为MYUtility的课程。

如果你使用+,比如

+ (NSString *)reverse:(NSString *)stringToReverse

你可以像

一样直接使用它
NSString *reversed = [MYUtility stringToReverse:@"I Love objective C"];

如果你使用了 - ,比如

- (NSString *)reverse:(NSString *)stringToReverse

你必须使用:

MYUtility *myUtil = [[MYUtility alloc] init];
NSString *reversed = [myUtil stringToReverse:@"There are many ways to do the same thing"];

使用基于类的函数,您只需直接调用,但除了#defines之外,您无法访问任何局部变量,因为该类未被实例化。

但是使用 - (NSString,你必须在使用之前实例化该类,并且你可以访问所有局部变量。

这不是一个选择并坚持下去,很多类都有,只要查看NSString的头文件,就会出现+函数和 - 函数。

答案 3 :(得分:1)

根据this page

  

实例方法以 - 开头,类级方法以+

开头

有关详细信息,请参阅this SO question

答案 4 :(得分:0)

第一个是实例方法,第二个是类方法。您应该阅读Apple的Objective-C文档以了解其中的差异。

相关问题