热门搜索 :
考研考公
您的当前位置:首页正文

属性变量,实例变量,全局变量

来源:东饰资讯网

对于属性,我们第一时间就会想到 self.name,@property,如:

@property(nonatomic,copy) NSString *name;

这里的name 被我们称为属性变量,或是成员变量。
对于这种:

@interface Person() {
NSString *_shortname;
}

我们称为实例变量。
区别:成员变量 = 实例变量 + 存取方法(setter,getter)。
比如:当我们使用self.name = @"name" 的时候实际上是使用了namesetter方法,对实例变量_name进行了赋值。

 -(void)setName:(NSString *)name {
 _name = name;
}

当我们读取self.name的值的时候,实际上是通过getter方法获取_name的值。

-(NSString *)name {
return _name;
}

注意:1.如果你需要同时重写namesettergetter方法的时候,你需要使用

@synthesize name = _name;

2.在init方法中不要使用self.来调用属性。self.这种方式会调用存取方法,需要一个已经完全初始化好的对象来进行操作,而在init方法中,存在着self没有完全初始化好的的情况,可能会出现一些莫名其妙的问题。
局部变量就不再赘述,对于全局变量,首先要说明_name这种不叫全局变量!!!全局变量的定义一般是这个样子的:

NSString * Phone = @"138xxxxxxxxxx";

需要注意的一点是,当我们使用const声明全局变量之后,表示该值是不可修改的。

NSString * const Phone = @"138xxxxxxxxxx";

对于static来说,static 是限定该变量的作用范围只在定义该变量的编译单元中有效,一般都是在.m文件中使用static定义,表示只在当前类中可以使用。当然,如果是暴露在.h文件中,只要导入该类的头文件自然是可以使用Phone的。

static NSString * const Phone = @"138xxxxxxxxxx";

注意:如果在extern引用的时候没有添加const关键字,即便是在定义时声明该值不可变,该值仍然是可以被改变的。

extern NSString *Phone;
Phone = @"xxxxxxxxxxx138";
NSLog(@"%@", Phone);
const.png
Top