美文网首页
OC中的类属性与成员变量(实例变量)

OC中的类属性与成员变量(实例变量)

作者: 一叶知秋0830 | 来源:发表于2019-12-01 11:40 被阅读0次

    下面关于属性和成员变量的描述只是针对OC的类(分类和类稍有不同)。
    属性是有setter和getter方法的,并且会默认生成带下划线的成员变量。如果只是在{}中声明了成员变量,是不会有属性的,也不会生成setter和getter方法。

    属性

    @interface Device : NSObject
    
    @property (nonatomic , strong) NSString *deviceID;
    
    @end
    

    如上所示我们通过property定义的deviceID就是属性。

    成员变量(实例变量)

    1.默认生成_deviceID成员变量

    如上所示定义deviceID的属性后,编译器会自动生成一个带下划线的成员变量_deviceID。我们可以通过self.deviceID访问属性,通过_deviceID访问成员变量(两种方式访问的结果是一样的)。

    #import "Device.h"
    
    @implementation Device
    
    - (void)function1{
        self.deviceID = @"124"; // 属性
        _deviceID = @"124"; // 成员变量
    }
    @end
    

    2.通过@synthesize来生成成员变量

    2.1 @synthesize deviceID

    在.m文件的@implementation中加入代码@synthesize deviceID;后,编译器会自动生成setter/getter方法,并且此时的成员变量是deviceID而不是_deviceID

    @implementation Device
    @synthesize deviceID;
    
    - (void)function1{
        self.deviceID = @"124"; // 属性
        deviceID = @"124"; // 成员变量
    }
    @end
    
    2.2 @synthesize deviceID = dID

    如果改成@synthesize deviceID = dID;,此时的成员变量就变成了dID

    @implementation Device
    @synthesize deviceID = dID;
    
    - (void)function1{
        self.deviceID = @"124"; // 属性
        dID = @"124"; // 成员变量
    }
    @end
    

    3.自己定义成员变量

    可以在.h或.m文件的{}中定义成员变量。如果前面的@public修饰不写的话就是默认的@protected

    // .h文件中定义成员变量
    @interface Device : NSObject
    {
        @public NSString *deviceType;
    }
    @end
    
    // .m文件中定义成员变量
    @implementation Device
    {
     NSString *deviceState;
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:OC中的类属性与成员变量(实例变量)

          本文链接:https://www.haomeiwen.com/subject/hxzowctx.html