我是iOS开发的新手,并为IOS研究 Bluetooth Low Energy (BLE, Bluetooth 4.0)
。
我看到了一些示例代码,如下所示:
@property (strong, nonatomic) CBPeripheralManager *peripheralManager;
- (void)viewDidLoad
{
[super viewDidLoad];
// Start up the CBPeripheralManager
_peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
}
The question is :
为什么要添加" _"在ViewDidload
中的peripheralManager之前?
对不起我的英语和任何愚蠢......
提前致谢。
答案 0 :(得分:7)
大多数属性都由实例变量支持 默认情况下,readwrite属性将由实例变量支持,该实例变量将再次由编译器自动合成。
实例变量是一个存在的变量,它保存对象生命周期的值。用于实例变量的内存在首次创建对象时(通过alloc)分配,并在释放对象时释放。
除非另行指定,否则合成的实例变量与属性具有相同的名称,但带有下划线前缀。例如,对于名为firstName的属性,合成的实例变量将被称为_firstName。
虽然对象使用访问器方法或点语法访问自己的属性是最佳做法,但可以直接从类实现中的任何实例方法访问实例变量。下划线前缀清楚地表明您正在访问实例变量,而不是例如本地变量:
- (void)someMethod {
NSString *myString = @"An interesting string";
_someString = myString;
}
在这个例子中,很明显myString是一个局部变量,而_someString是一个实例变量。
通常,即使您从自己的实现中访问对象的属性,也应该使用访问器方法或点语法进行属性访问,在这种情况下,您应该使用self:
- (void)someMethod {
NSString *myString = @"An interesting string";
self.someString = myString;
// or
[self setSomeString:myString];
}
此规则的例外情况是编写初始化,释放或自定义访问器方法时,如本节后面所述。
答案 1 :(得分:0)
它的类成员变量的内部访问约定。
@property(strong)NSString * testString;
它可以在类,self.testString或_testString中访问。但这是不同的意义。 self.testString表示通过自动创建的成员函数进行访问。但是_testString意味着直接访问变量。
答案 2 :(得分:0)
当您声明属性_peripheralManager
@property (strong, nonatomic) CBPeripheralManager *peripheralManager;
您可以手动声明,结果将是相同的:
@synthesize peripheralManager = _peripheralManager;