Difference between + and - methods in Objective-c

后端 未结 5 1738
野的像风
野的像风 2020-12-14 06:42

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

e.g

- (void)methodname

+ (void)methodname


        
相关标签:
5条回答
  • 2020-12-14 07:03

    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)

    0 讨论(0)
  • 2020-12-14 07:22

    According to this page:

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

    See this SO question for more information.

    0 讨论(0)
  • 2020-12-14 07:23

    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 讨论(0)
  • 2020-12-14 07:29

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

    0 讨论(0)
  • 2020-12-14 07:30

    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"];
    
    0 讨论(0)
提交回复
热议问题