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编辑  收藏  举报

导航