What is the difference between methods that are declared with - and methods that are declared with +
e.g
- (void)methodname
+ (void)methodname
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.
+(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.
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"];