OC属性、实例变量、局部变量、全局变量、静态变量, Swift 属性、全局变量、静态变量

OC 中根据声明不同,所声明的实例变量或者属性的作用不同。

// .h 文件

@interface{

//  实例变量,访问限制允许时可被外界访问

}

// 属性 可被外界访问

@end 

 

// .m 文件中

@interface(){

//  实例变量。只能类内部访问。 不可与.h文件中实例变量同名。

}

// 属性 自动生层带下滑线的实例变量、get、set方法, 不可被外界访问(具体意义不清楚)

@end 

@implementation

// 全局变量。OC中一般不在此声明变量。

@end

 

 

一、@property  

  使用@property 修饰的变量,编译器会自动生成带下划线的同名属性和与之对应的 get set 方法。通过 . 的方式访问属性其实是访问与之对应的 get set 方法,所以在 get set 中不可以使用self.属性 的形式,否则会陷入死循环。当同时重写两个方法中是需在实现文件中添加 @synthesize property = _property;

  在类中,可直接访问其对应的属性。

// a.h
@property (nonautomic,copy) NSString *a;

//a.m

@synthesize a = _a;

 -(void) setA(NSString *val){
     _a = [NSString stringWithFormat: @"%@123", val ];  
}

-(NSString *)a{
    return _a;      
}

  

二、OC中只有.h 中声明的属性可以被外部访问,Swift 中同修饰符来控制成员变量的访问级别。

  Swift中将属性分为Store Property 和 computed property, 拥有set get  willSet didSet 四个方法。

  存储属性使用默认的get set 方法,一旦get 或者set 方法被重写,就决定了此变量一定是计算属性。

    didSet 和 willset 只能用于存储属性。

  同OC一样,在 get 中使用 self. 获取属性值或者 set 、willSet、didSet 中使用 self设置属性的值 都会导致无限循环崩溃。 

 

 

posted @ 2017-07-10 11:19  一坨☁️  阅读(995)  评论(0编辑  收藏  举报