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

Ale*_*lex 33 iphone cocoa objective-c

使用 - 声明的方法与使用+声明的方法之间有什么区别

例如

- (void)methodname

+ (void)methodname
Run Code Online (Sandbox Code Playgroud)

Jas*_*ien 51

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

[myStringInstance length];
Run Code Online (Sandbox Code Playgroud)

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

[NSString stringWithString:@"Hello World"];
Run Code Online (Sandbox Code Playgroud)

  • 我不能评论符号的选择,因为我根本就不知道......对不起.也许别人会知道? (2认同)
  • UML使用相同的表示法. (2认同)
  • UML使用+/- sure.UML也使用+/-来注释方法.然而,除了UML的使用和Obj-C使用完全不同. (2认同)

Abh*_*ara 7

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

假设您创建了一个实用程序类,该类具有反转字符串的方法。您称为 MYUtility 的类。

如果你使用+,就像

+ (NSString *)reverse:(NSString *)stringToReverse
Run Code Online (Sandbox Code Playgroud)

你可以直接使用它

NSString *reversed = [MYUtility stringToReverse:@"I Love objective C"];
Run Code Online (Sandbox Code Playgroud)

如果您使用 -,例如

- (NSString *)reverse:(NSString *)stringToReverse
Run Code Online (Sandbox Code Playgroud)

你必须使用:

MYUtility *myUtil = [[MYUtility alloc] init];
NSString *reversed = [myUtil stringToReverse:@"There are many ways to do the same thing"];
Run Code Online (Sandbox Code Playgroud)

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

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

这不是选择一件事并坚持下去,许多类都有,只要看看 NSString 的头文件,它就散落着 + 函数和 - 函数。