OC 成员变量,实例变量,属性变量 @property @synthesize
- OC 变量分为三大类: 成员变量、实例变量、属性变量
成员变量:在 {} 里声明的变量。
实例变量: 在 {} 里声明的变量,且变量类型为一个类,是针对类而言的。
属性变量:通过@property声明的变量,会生成setter和getter方法。用于与其它对象交互的变量。
@interface MyViewController :UIViewControlle { /**** 成员变量, 包括实例变量 ****/ UIButton *yourButton; //实例变量(数据类型是类) int count; id data;//实例变量(数据类型是类) } @property (nonatomic, strong) UIButton *myButton; //属性变量(有对应的成员变量_myButton, setter方法,getter方法) @end
实例变量是成员变量的一种,成员变量用于类内部,不会生成set和get方法。
属性变量可以让其它对象访问,创建时会自动生成: _变量名, setter方法, getter方法
属性变量对应的成员变量为: _变量名. 在执行setter和getter方法中,实现对 _变量名 进行赋值和取值。
@property(nonatomic, strong) NSString *myString;
- 定义一个属性必须的三部曲:_myString + @property + @synthesize myString
2、在GCC编译器中,必须手动生成 :
_成员变量 : {} 里创建 _变量名
@property : 创建属性名
@synthesize 成员变量: 在.m里为属性创建setter和getter方法。
@interface ViewController () { // 1.声明成员变量 NSString *myString; } //2.在用@property @property(nonatomic, copy) NSString *myString; @end @implementation ViewController //3.最后在@implementation中用synthesize生成set方法 @synthesize myString = _xxxx; // 创建属性myString对应的成员变量_xxxx @synthesize myString; //没有隐式的成员变量 _myString @end
2、在LLVM编译器中,不需要手动创建: _变量名, @synthesize 变量名。编译器会自动创建。
在.m文件中不创建@synthesize, 系统会默认创建 _myString, setmyString(), myString()
在.m中添加@synthesize:
@synthesize myString; //系统中不会添加一个不可见的_myString成员变量。
@synthesize myString = _xxx; //系统默认会添加一个属性myString对应的成员变量_xxx。
在.h 文件中声明的成员变量,不会被其它对象调用,不会暴露在外面,在.m中不会有对应的@synthesize,因为成员变量没有对应的set和get方法。
只有在.h中声明的@property变量,才会被其它对象调用,在.m中@synthesize创建并生成set和get方法(LLVM编译器默认创建,不显示,手动添加也可以)。
self.myString 会默认调用setter和getter方法。 “.”在=号左边,调用setter方法,“.”在=号右边,调用getter方法。
self.myString = @“my”; //自动调用setter方法。
NSString *string = self.myString; // 自动调用getter方法。
posted on 2020-11-18 14:16 东方🐺 阅读(580) 评论(0) 编辑 收藏 举报