开发者

Difference between + and - methods in Objective-c

开发者 https://www.devze.com 2022-12-19 15:22 出处:网络
What is the difference between methods that are d开发者_Go百科eclared with - and methods that are declared with +

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号