【发布时间】:2010-02-10 16:44:37
【问题描述】:
用-声明的方法和用+声明的方法有什么区别
例如
- (void)methodname
+ (void)methodname
【问题讨论】:
标签: iphone objective-c cocoa
用-声明的方法和用+声明的方法有什么区别
例如
- (void)methodname
+ (void)methodname
【问题讨论】:
标签: iphone objective-c cocoa
以- 为前缀的方法是实例方法。这意味着它们只能在类的实例上调用,例如:
[myStringInstance length];
以+ 为前缀的方法是类方法。这意味着它们可以在类上调用,而不需要实例,例如:
[NSString stringWithString:@"Hello World"];
【讨论】:
+(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 的头文件,里面到处都是 + 函数和 - 函数。
【讨论】:
减号是实例方法(只能通过实例化对象访问)
另外还有类方法(就像在 Java Math.abs() 中,你可以在没有实例化对象的情况下使用它)
【讨论】:
【讨论】:
第一个是实例方法,第二个是类方法。您应该阅读 Apple 的 Objective-C 文档以了解其中的区别。
【讨论】: