1) @property es una forma especial de definir getter- y setter-methods, o como los llamamos accessors en Objective-C. Su primer fragmento solo declara una matriz para la cual tiene que declarar y escribir los descriptores de acceso usted mismo. Por ejemplo setMyArray:
y myArray
.
El uso de @property declarará sus accesadores por usted y es equivalente a declarar setMyArray:
y myArray
usted mismo. Es la forma preferida de declarar accesores desde Objective-C 2.0. Tenga en cuenta que aún tiene que declarar la propiedad (en su caso myArray) usted mismo.
2) Primero necesita saber acerca de @synthesize. Recuerde que @property DECLARA los accesadores para su propiedad, @synthesize los IMPLEMENTARÁ. Cuando usas @property en tu @interface es muy probable que escribas @synthesize en @implementation. Usar @synthesize es equivalente a implementar setMyArray:
y myArray
.
Los atributos (nonatomic, retain)
le dicen al compilador, entre otros, cómo debería funcionar la administración de la memoria y, por lo tanto, cómo se implementarán los métodos. Tenga en cuenta que nunca verá estos accesos, pero tenga la certeza de que están allí y listos para que los use.
Para leer más sobre este tema, recomiendo leer la Sección 9 en Propiedades de la siguiente Tutorial o comprar una Book que cubra una Introducción a Objective-C.
También debe familiarizarse con al menos los siguientes atributos:
- acceso
- Elija
readwrite
(por defecto) o readonly
. Si se establece readonly
, SOLAMENTE los métodos getter estarán disponibles.
- Setter Gestión de memoria
assign
(por defecto), simplemente asigna el nuevo valor. Lo más probable es que solo lo use con tipos de datos primitivos.
retain
, libera el valor anterior y conserva el nuevo. Si usa el recolector de basura, retain
es equivalente a assign
. ¿Por qué? La liberación manual del valor anterior será realizada por el recolector de basura.
copy
copiará el nuevo valor y liberará el valor anterior. Esto a menudo se usa con cadenas.
- enhebrar
atomic
(por defecto) se asegurará de que el método de selección es atómica. Esto significa que solo un hilo puede acceder al colocador de una vez.
nonatomic
, utilice esto cuando no trabaje con hilos.
This post le da una buena introducción a la gestión de memoria y assign
, retain
y copy
.
parte de este única respuesta 2 de la pregunta. La respuesta de Simon discute la parte 1. –
@MarkAmery por supuesto - Sentí que la parte 1 era realmente básica, y otras respuestas la cubrieron mientras respondía. No es necesario agregar información duplicada aquí. –
# 2 es completamente incorrecto. las propiedades 'atómicas' * no * garantizan la seguridad del hilo; más bien asegura la atomicidad. Si tanto el hilo A como el hilo B escriben, 'atómico' asegura que el resultado será un valor completo, es decir, uno u otro. Cuál es indefinido Escribir código seguro para subprocesos no es tan simple como usar propiedades 'atómicas'. Consulte la sección "Sincronización" de la Guía de programación de Threading: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i -CH8-SW1 –