OC中函数声明前面的‘+’号和‘-’号

函数声明前的 ‘-’号

(学习记录,如果有不妥的地方,还请不吝赐教)

方法前面一个减号表示这个方法是一个实例方法也叫对象方法,顾名思义是只有用对象调用的方法也就是必须对象存在了才能去调用这个方法。

@interface Person:NSObject{
    NSString * name;//这是一个字符串对象
}

-(void)setName:(NSString *)aName;//参数是一个字符串对象

-(NSString *)getName;//返回一个字符串对象

@end

我们为Person类声明了两个方法,一个设置姓名,一个获取姓名。由于方法前面是‘-’号,所以这两个方法就是对象方法,只能用对象才能去调用的方法。

#import <Foundation/Foundation.h>
#import "Person.h"//导入Person的头文件
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person * xw=[[Person alloc] init];//创建一个对象

        [xw setName:@"xiaowang"];//调用setName方法

        NSLog(@"%@",[xw getName]);//调用getName方法
    }
    return 0;
}

在.m文件中我们通过对象来调用方法来实现姓名的设置和获取

函数声明前的 ‘+’号

1.方法前面一个加号表示这个方法是一个类方法,类方法是无需实例化就可以直接用这个类去调用的方法 不需要分配内存空间。

2.不能用类方法去调用成员变量,属性变量,实例方法(对象方法).。

#import <Foundation/Foundation.h>
#import "Person.h"//导入Person的头文件
int main(int argc, const char * argv[]) {
    @autoreleasepool {
       


         Person * xw=[[Person alloc] init];//创建一个对象

        //[xw setName:@"xiaowang"];//调用setName方法

        //NSLog(@"%@",[xw getName]);//调用getName方法
    }
    return 0;
}

之前的.m文件中的创建对象的这一步,实际上是两个过程,首先是进行[Person alloc],然后对其返回值再进行init,注意到这里

第一个过程中调用 alloc方法的是 Person这个类,所以alloc是一个类方法,它是NSObject类的类方法。而init是一个对象方法,

因为[Person alloc]的返回值是一个对象。

在NSObject的定义中我们可以看到init方法和alloc方法的声明。 

猜你喜欢

转载自blog.csdn.net/qq_41856760/article/details/81220783