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

2019-12-01  本文已影响0人  一叶知秋0830

下面关于属性和成员变量的描述只是针对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
上一篇 下一篇

猜你喜欢

热点阅读