que puede programar programacion programa objective lenguaje enlazador con caracteristicas apple objective-c llvm automatic-ref-counting

objective-c - puede - swift 2



¿Es necesario self.iVar para propiedades fuertes con ARC? (1)

Desde la perspectiva de la gestión de la memoria, usar ivar = ... o self.property = ... (nota: no existe tal cosa como self.ivar ) son lo mismo. Sin embargo, usar ivar = ... no invoca el self.property = ... mientras self.property = ... hace. Esto tiene 3 ramificaciones importantes, sin ningún orden en particular:

  1. Si la propiedad no está marcada como no nonatomic , entonces el acceso al ivar subyacente no tomará el bloqueo y usted estará rompiendo las implicaciones de la atomicidad.
  2. Si la propiedad está anulada, ya sea por usted o por una subclase, no se invocará al establecedor anulado.
  3. Las notificaciones KVO no serán enviadas.

Como solo para declarar el ivar, tiene la misma semántica de administración de memoria que declarar una variable local. Esto se documenta en la sección 4.4 del documento de conteo automático de referencias de Objective-C , pero básicamente, si se trata de un objeto, se __strong es __strong .

  1. Si declaro una propiedad fuerte, así:

    @property (strong, nonatomic) UIView *iVar;

    Cuando lo estoy configurando, ¿importa si hago iVar = ... o self.iVar = ... ? Parece que con ARC, hacen lo mismo.

  2. Si solo declaro la variable de instancia (no la propiedad @), por ejemplo, BOOL selected , ¿eso significa que se deduce que __unsafe_unretained (ya que no hay ninguna propiedad que especifique que sea fuerte), o debo especificarlo explícitamente?

Parece que puedo haber respondido a mis propias preguntas antes de responder ARC: ¿Cómo liberar una variable estática? , pero todavía estoy un poco confundido en las preguntas anteriores.