2011-04-27 11 views

Respuesta

15

Creo que los valores predeterminados son (atomic, assign), sin embargo, no debe dejarlos vacíos.

El valor predeterminado puede cambiar en cualquier punto, y está escribiendo código que se basa en la definición de la propiedad.

Por ejemplo, si confía en el valor predeterminado assign y cambia a retain por cualquier motivo en el futuro, entonces todo su código va a tener fugas.

Por el contrario, si el valor predeterminado es retener y usted confía en eso y cambia para asignarlo, su código se bloqueará cuando inevitablemente se libere un objeto.

No confíe en ningún valor predeterminado, independientemente de cuáles sean.

Defina explícitamente los atributos de sus propiedades.

+5

Cuidado: el valor predeterminado con ARC ha cambiado a "fuerte". Ver [aquí] (http://stackoverflow.com/questions/9773604/property-definitions-with-arc-is-strong-default-now). – Ant

+2

Precisamente lo que dije en mi respuesta: los valores predeterminados pueden cambiar. No confíes en ellos. Se específico. – Jasarien

+0

Desafortunadamente, los encabezados de Apple * muy * frecuentemente usan los valores predeterminados, por lo que es bastante útil saber cuáles son. Vea CAShapeLayer.h para un buen ejemplo. – SG1

0

Las propiedades son atómicas por defecto para que los accesadores sintetizados proporcionen un acceso robusto a las propiedades en un entorno multiproceso; es decir, el valor devuelto o establecido por el colocador se recupera o establece completamente independientemente de lo que otros hilos estén ejecutando al mismo tiempo.

Si especifica strong, copy o retener y no especifica nonatomic, en un entorno contado de referencia, un acceso de obtención sintetizado para una propiedad de objeto utiliza un bloqueo y conserva y libera automáticamente el valor devuelto.

No creo que Apple lo cambie en el futuro, pero desafortunadamente el más común no es atómico, por lo que puede que tenga que escribirlo.

Cuestiones relacionadas