¿@synthesize algo = _algo;¿Crear automáticamente la variable _algo también?
-
13-12-2019 - |
Pregunta
Entiendo que @synthesize crea automáticamente los captadores y definidores de una variable de instancia.Cuando especifico la parte = _something, entiendo que esto informa al compilador/tiempo de ejecución que quiero que use una variable de respaldo particular para los captadores/definidores.
¿Objetive-C crea automáticamente la variable _something junto con mis captadores/definidores o debería definir esa variable de instancia en mi archivo de interfaz/implementación?
Solución
La pregunta es si @property en el archivo de encabezado y @synthesize en la implementación crean el ivar subyacente o si el ivar debe aparecer en el archivo de encabezado.Ejemplo, en el archivo de encabezado:
@interface SomeClass : NSObject {
NSString *_someString; // Is this needed???
}
@property NSString *someString;
y en la implementación:
@synthesize someString = _someString;
La respuesta es que depende de si está utilizando o no el tiempo de ejecución heredado o moderno.En iOS siempre estás usando el tiempo de ejecución moderno, por lo que nunca necesitas el NSString *_somestring
línea, pero esta pregunta es sobre Mac OS X.Para Mac OS X, si está utilizando un programa de 64 bits en Mac OS X 10.5 o posterior, está utilizando el tiempo de ejecución moderno; de lo contrario, está utilizando el tiempo de ejecución heredado y necesita la línea adicional en su archivo de encabezado.Dado que se ha publicado información errónea, aquí hay una referencia: Guía de programación en tiempo de ejecución de Objective-C.
Otros consejos
Lo siento, mal la leído por parte de su pregunta.Si haces la parte de @Syntsize con el subrayado, eres todo bien.No hay necesidad define explícitamente un IVAR.