Tuve algunos debates relacionados con el uso de propiedades y variables de instancia en el trabajo, por lo tanto, me gustaría encontrar una respuesta wiki para eso. Ahora, sé que no hay un tipo de miembro privado real en Objectivo-c, todo es bastante público. Sin embargo, estoy un poco preocupado por la forma en que debemos diseñar nuestras clases y también cumplir con los principios de OOP. Me gustaría escuchar las opiniones de estos tres enfoques de diseño:¿Cómo deben implementarse los miembros privados y públicos en Object-C?
A. De acuerdo con varios correos e incluso a un nuevo curso de desarrollo de iPhone de la Universidad de Stanford, siempre debe usar propiedades donde sea que pueda. Sin embargo, en mi humilde opinión, este enfoque frenará los principios de diseño de OOP porque en este caso, todos los miembros se hacen públicos. ¿Por qué tengo que publicar todas mis variables de instancia internas/locales en el exterior? Además, hay muy poca (pero aún) sobrecarga si usa setters sintetizados a través de propiedades, en lugar de eso, usa directamente ivar local. He aquí una muestra:
//==== header file =====//
@interface MyClass : NSObject
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@property (nonatomic, retain) NSString *propertyForPrivateMember;
@end
B. Otro enfoque es declarar Ivars en el archivo de cabecera (sin declarar propiedades relativas) para los miembros privados, y en el mismo archivo de cabecera, para declarar propiedades puros (sin declarar Ivars relativos) para miembros públicos. En tal caso, ivars se usarían directamente en la clase. Este enfoque tiene sentido pero no utiliza todos los beneficios de las propiedades porque tenemos que liberar manualmente los valores anteriores antes de configurar los nuevos. He aquí una muestra:
//==== header file =====//
@interface MyClass : NSObject{
NSString *_privateMember;
}
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@end
C. Declarar propiedades puros (sin declarar Ivars relativos) para miembros del público en el archivo de cabecera, y para declarar propiedades puros (sin declarar Ivars relativos) para los miembros privados de interfaz privada en el archivo de aplicación . Este enfoque en mi humilde opinión es más claro que el primero, pero sigue siendo la misma pregunta: ¿por qué tenemos que tener propiedades para miembros internos/locales? He aquí una muestra:
libertad//==== header file =====//
@interface MyClass : NSObject
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@end
//==== implementation file =====//
@interface MyClass()
@property (nonatomic, retain) NSString *propertyForPrivateMember;
@end
Esta decisión me molesta un poco y me gustaría encontrar una confirmación de fuentes respectivas acerca de cómo deben hacerse las cosas. Sin embargo, no pude encontrar declaraciones tan estrictas en los documentos de Apple sobre eso, así que publique un enlace a los documentos de apple si los hay, o a cualquier otra teoría que lo aclare.
Esta pregunta parece ser muy subjetiva e imposible de responder de la manera correcta. – Till
La pregunta es muy simple: ¿cómo deberían implementarse los miembros privados y públicos en Object-C, y donde pude encontrar la voz estricta de Apple al respecto? – Centurion
Propongo diferencias, pero no entraré más en la discusión. Como una pista para probar mi reclamo, se dio cuenta de que, por ejemplo, los cursos de Stanford recomiendan usar propiedades en todas partes. – Till