使用 - 声明的方法和使用+
声明的方法之间有什么区别e.g
- (void)methodname
+ (void)methodname
答案 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)
答案 4 :(得分:0)
第一个是实例方法,第二个是类方法。您应该阅读Apple的Objective-C文档以了解其中的差异。