Desde aquí http://www.macosxguru.net/article.php?story=20030713184140267
- (id)getMyInstance
{
return myInstanceVar ;
}
o
- (id)getMyInstance
{
return [[myInstanceVar retain] autorelease] ;
}
Cuál es la diferencia? El segundo permite que la persona que llama obtenga una variable de instancia de un objeto contenedor, deseche el contenedor y continúe jugando con la variable de instancia hasta la próxima versión de la agrupación autorretratada actual, sin que la versión de la variable de instancia lo afecte indirectamente generada por la liberación de su contenedor:
aLocalVar = [aContainer getAnInstanceVar] ;
[aContainer release];
doSomething(aLocalVar);
Si el "get" se implementa en la primera forma, se debe escribir:
aLocalVar = [[aContainer getAnInstanceVar] retain];
[aContainer release];
doSomething(aLocalVar);
[aLovalVar release];
la primera forma es un poco más eficiente en términos de velocidad de ejecución del código Sin embargo, si está escribiendo marcos para ser utilizados por otros, tal vez debería recomendarse la segunda versión: hace la vida un poco más fácil para las personas que usan su marco: no tienen que pensar demasiado acerca de lo que están haciendo ... ;) Si elige la primera versión de estilo, indíquela claramente en su documentación ... Sea cual sea la forma que elija, recuerde que cambiar de la versión 1 a la versión 2 es guardar para el código de cliente, cuando regrese de la versión 2 a la 1 romper el código de cliente existente ...
Eso depende. Es un requisito absoluto para las propiedades a las que se puede acceder desde múltiples hilos, por ejemplo. En términos más generales, las situaciones que no aparecen a menudo son las que conducen a scratchers de cabeza realmente molestos. –
Creo que veo lo que está diciendo, con respecto a varios subprocesos, ya que podría tener varios grupos de versiones independientes y ejecutar bucles. Todavía creo que la liberación automática en setter tiene más sentido en ese caso. –
Y en el caso del acceso de subprocesos múltiples, suelo utilizar [obj copy]: tener instancias separadas de objetos elimina cualquier posibilidad de conflicto. –