¿Por qué en ObjectiveC hay un parámetro "_" antes?

Soy nuevo en el desarrollo de iOS y estudio sobre Bluetooth Low Energy (BLE, Bluetooth 4.0) para IOS.

He visto un código de ejemplo como el siguiente:

 @property (strong, nonatomic) CBPeripheralManager *peripheralManager; - (void)viewDidLoad { [super viewDidLoad]; // Start up the CBPeripheralManager _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; } 

The question is :

¿Por qué agrega el "_" antes de peripheralManager en ViewDidload ?

Perdón por mi inglés y cualquier estúpido …

Gracias por adelantado.

De los documentos de Apple

La mayoría de las properties están respaldadas por variables de instancia De forma pnetworkingeterminada, una propiedad de escritura de lectura estará respaldada por una variable de instancia, que el comstackdor volverá a sintetizar automáticamente.

Una variable de instancia es una variable que existe y mantiene su valor para la vida del object. La memory utilizada para las variables de instancia se asigna cuando el object se crea por primera vez (a través de alloc), y se libera cuando el object se desasigna.

A less que especifique lo contrario, la variable de instancia sintetizada tiene el mismo nombre que la propiedad, pero con un prefijo de subrayado. Para una propiedad llamada firstName, por ejemplo, la variable de instancia sintetizada se llamará _firstName.

Aunque es la mejor práctica para que un object acceda a sus propias properties utilizando methods de acceso o syntax de punto, es posible acceder a la variable de instancia directamente desde cualquiera de los methods de instancia en una implementación de class. El prefijo de subrayado deja en claro que está accediendo a una variable de instancia en lugar de, por ejemplo, una variable local:

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

En este ejemplo, está claro que myString es una variable local y _someString es una variable de instancia.

En general, debe utilizar los methods accessor o la syntax de punto para el acceso a la propiedad, incluso si está accediendo a las properties de un object desde su propia implementación, en cuyo caso debe usar self:

 - (void)someMethod { NSString *myString = @"An interesting string"; self.someString = myString; // or [self setSomeString:myString]; } 

La exception a esta regla es cuando se escriben los methods de initialization, desasignación o acceso personalizado, como se describe más adelante en esta sección.

Es la convención de acceso interno de la variable miembro de class.

@property (fuerte) NSString * testString;

Puede ser acceso en class, self.testString o _testString. Pero es un significado diferente. self.testString significa acceso a través de la function de miembro creada automáticamente. Pero _testString significa acceso directo a variable.

El comstackdor genera automáticamente la variable de instancia _peripheralManager cuando declara la propiedad @property (strong, nonatomic) CBPeripheralManager *peripheralManager;

Puede declararlo manualmente, el resultado sería el mismo:

 @synthesize peripheralManager = _peripheralManager;