What is the difference between methods that are d开发者_Go百科eclared with - and methods that are declared with +
e.g
- (void)methodname
+ (void)methodname
Methods prefixed with -
are instance methods. This means they can only be invoked on an instance of a class, eg:
[myStringInstance length];
Methods prefixed with +
are class methods. This means they can be called on Classes, without needing an instance, eg:
[NSString stringWithString:@"Hello World"];
+(void)methodname
is a class variable and -(void)methodname
is object variable.
Lets say you make a utility class that has a method to reverse string. The class you call MYUtility.
If you use +, like
+ (NSString *)reverse:(NSString *)stringToReverse
You could use it directly like
NSString *reversed = [MYUtility stringToReverse:@"I Love objective C"];
if you used a -, like
- (NSString *)reverse:(NSString *)stringToReverse
You have to use :
MYUtility *myUtil = [[MYUtility alloc] init];
NSString *reversed = [myUtil stringToReverse:@"There are many ways to do the same thing"];
With the class based function, you just call directly, but you don't have access to any local variables besides #defines that you can do because the class isn't instantiated.
But with the - (NSString you must instantiate the class before use, and you have access to all local variables.
This isn't a pick one thing and stay with it, many classes have both, just look at the header file for NSString, it is littered with + functions and - functions.
minus are instance methods (only accessible via an instantiated object)
plus are class methods (like in Java Math.abs(), you can use it without an instantited object)
According to this page:
Instance methods begin with - and class level methods begin with +
See this SO question for more information.
The first is an instance method and the second is a class method. You should read Apple's Objective-C documentation to learn about the difference.
精彩评论