为什么在ObjectiveC中参数之前有一个"_"?

Wun*_*Wun 3 objective-c ios

我是iOS开发的新手,并且正在研究Bluetooth Low Energy (BLE, Bluetooth 4.0)IOS.

我看到了一些示例代码,如下所示:

@property (strong, nonatomic) CBPeripheralManager *peripheralManager;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Start up the CBPeripheralManager
    _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
}
Run Code Online (Sandbox Code Playgroud)

The question is :

为什么在externalManager之前添加"_" ViewDidload

对不起我的英语和任何愚蠢的......

提前致谢.

Fle*_*der 7

来自Apple Docs

大多数属性由实例变量支持默认情况下,readwrite属性将由实例变量支持,该实例变量将再次由编译器自动合成.

实例变量是一个存在的变量,它保存对象生命周期的值.用于实例变量的内存在首次创建对象时(通过alloc)分配,并在释放对象时释放.

除非另行指定,否则合成的实例变量与属性具有相同的名称,但带有下划线前缀.例如,对于名为firstName的属性,合成的实例变量将被称为_firstName.

尽管对象使用访问器方法或点语法访问自己的属性是最佳做法,但可以直接从类实现中的任何实例方法访问实例变量.下划线前缀清楚地表明您正在访问实例变量而不是例如本地变量:

- (void)someMethod {
    NSString *myString = @"An interesting string";

    _someString = myString;
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,很明显myString是一个局部变量,而_someString是一个实例变量.

通常,即使您从其自己的实现中访问对象的属性,也应该使用访问器方法或点语法进行属性访问,在这种情况下,您应该使用self:

- (void)someMethod {
    NSString *myString = @"An interesting string";

    self.someString = myString;
  // or
    [self setSomeString:myString];
}
Run Code Online (Sandbox Code Playgroud)

此规则的例外是在编写初始化,释放或自定义访问器方法时,如本节后面所述.