todas texto subrayado solucionar rojo rojas rayas quitar palabras ortografía ortografia omitir marcas las formato corregir como objective-c cocoa synthesize

objective-c - texto - como quitar las rayas rojas de word



Objective-C: ¿propiedades de solo lectura no sintetizadas con un subrayado ivar? (1)

Una propiedad no se sintetiza automáticamente si implementa todos los métodos de acceso requeridos (getter para una propiedad de solo lectura, getter + setter para una propiedad de lectura-escritura).

Debido a que implementa el método getter -(NSString *)myString para la propiedad de solo lectura, no se sintetiza automáticamente. Si su getter necesita una variable de instancia para respaldar el valor de la propiedad, debe agregar la sentencia de síntesis (como lo hizo) o una variable de instancia.

Si entiendo correctamente, en Objective-C, las propiedades se sintetizan automáticamente con captadores y definidores, con la variable de instancia declarada como el nombre de la propiedad con un guión bajo ( _ivar ).

Por lo tanto, este código:

main.m

#import <Foundation/Foundation.h> #import "hello.h" int main(int argc, char *argv[]) { @autoreleasepool { Hello *hello = [[Hello alloc] init]; NSLog(@"%@", hello.myString); return 0; } }

Hola h

#import <Foundation/Foundation.h> @interface Hello : NSObject @property (copy, nonatomic) NSString *myString; @end

Hola

#import "hello.h" @implementation Hello -(Hello *)init { if (self = [super init]) { _myString = @"Hello"; } return self; } -(NSString *)myString { return [NSString stringWithFormat:@"%@ %@", _myString, @"World"]; } @end

Se puede compilar y ejecutar de esta manera:

bash-3.2$ clang -framework Foundation main.m hello.m -o hello bash-3.2$ ./hello 2013-05-27 13:20:39.738 hello[23320:707] Hello World

Ahora cuando cambio la propiedad myString para que se lea solo así:

@property (readonly, copy, nonatomic) NSString *myString;

Entonces cuando intento compilar me sale un error:

hello.m:11:9: error: unknown type name ''_myString''; did you mean ''NSString''? _myString = @"Hello"; ^~~~~~~~~ NSString

Así que _myString no está definido. ¿El compilador no sintetizó la propiedad con la variable de instancia _myString? A ver si funciona cuando lo sintetizo yo mismo:

En la implementación de hello.m:

@synthesize myString = _myString;

Ahora vuelve a funcionar:

bash-3.2$ clang -framework Foundation main.m hello.m -o hello bash-3.2$ ./hello 2013-05-27 13:36:59.916 hello[24219:707] Hello World

Entonces, mi pregunta es, ¿por qué no se sintetiza automáticamente con un subrayado ivar cuando se usa readonly en las propiedades? ¿O estoy totalmente en el camino equivocado para entender cómo funcionan estas cosas de Objective-C?

Apreciaría mucho una respuesta explicativa, ya que realmente quiero entender qué está sucediendo exactamente y por qué.

Gracias de antemano.