Alex
Alex

Reputation: 2513

Difference between + and - methods in Objective-c

What is the difference between methods that are declared with - and methods that are declared with +

e.g

- (void)methodname

+ (void)methodname

Upvotes: 38

Views: 16503

Answers (5)

Abhinay Reddy Keesara
Abhinay Reddy Keesara

Reputation: 10141

+(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.

Upvotes: 7

Jasarien
Jasarien

Reputation: 58468

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"];

Upvotes: 58

Tim
Tim

Reputation: 13258

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)

Upvotes: 2

Stefan Arentz
Stefan Arentz

Reputation: 34935

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.

Upvotes: 0

Kaleb Brasee
Kaleb Brasee

Reputation: 51965

According to this page:

Instance methods begin with - and class level methods begin with +

See this SO question for more information.

Upvotes: 1

Related Questions