Soy un experimentado desarrollador de iOS y he decidido probar suerte en algún desarrollo de AppKit. Hay un par de ajustes que estoy haciendo API-wise, pero de lo contrario estoy descubriendo que el desarrollo de OS X es, digamos, "familiar".Al desarrollar en AppKit, ¿por qué IB crea una propiedad que se asigna, en lugar de retener?
He estado construyendo mi AppKit interfaces de usuario en el Interface Builder y se dio cuenta de que cuando se utiliza el editor WYSIWYG para crear propiedades en mis archivos de código, Apple está creando la siguiente:
@property (assign) IBOutlet NSTableView *tableView;
Me parece muy curioso porque la manera de hacer las cosas por defecto en iOS me habría llevado a hacer esto:
@property (nonatomic, retain) IBOutlet NSTableView *tableView;
que darse cuenta de que en el desarrollo de Mac no tengo las mismas restricciones de memoria que hago en el móvil, en una vista podría conseguir descargado y puede haber una necesidad de referencia fuerte ences a elementos de UI.
En el caso de AppKit, puedo asumir que mis elementos de la interfaz de usuario siempre estarán allí a menos que juegue con la jerarquía de vistas y la elimine de su vista principal. Parecería prudente tener una referencia fuerte en todo momento con el fin de evitar el acceso involuntario a punteros colgantes.
¿Por qué Apple está creando una referencia débil aquí, en lugar de una fuerte?
¿Me estoy preparando para alguna consecuencia involuntaria mediante el uso de referencias fuertes (pero que se publica correctamente en dealloc
)? ¿Hay algún patrón aquí que me falta?
temía que iba a ser la respuesta, pero muy bien explicado, no obstante. –
Entonces, ¿todavía necesitaríamos un '[tableView release]' en 'dealloc'? Si es así, ¿cuándo se llama a esa publicación cuando se usa ARC? – MrMage
@MrMage: Normalmente no sería propietario de una vista de tabla, ya que normalmente la colocaría en una ventana o vista de contenedor en el plumín, no la tendría en el nivel superior del plumín. Tendría la ventana o la vista de nivel superior, y simplemente conocer la vista de tabla. Cualquier cosa que poseas, debes liberarla. –