no todos los captadores tomar esta forma:
- (id)variable { return variable; }
... que no es más que la forma más primitiva. las propiedades por sí solas deberían sugerir más combinaciones, que alteran la implementación. el acceso primitivo anterior no tiene en cuenta las expresiones idiomáticas utilizadas junto con la gestión de memoria, la atomicidad o la semántica de copia. la implementación también es frágil en las anulaciones de subclase.
algunos ejemplos realmente breves siguen; Obviamente, las cosas se vuelven más complejas en programas reales donde las implementaciones se vuelven considerablemente más complejas.
1) el captador no puede devolver la variable de instancia.una de varias posibilidades:
- (NSObject *)a { return [[a copy] autorelease]; }
2) el colocador puede no retener la variable de instancia. una de varias posibilidades:
- (void)setA:(NSObject *)arg
{
...
a = [arg copy];
...
}
3) se termina con la aplicación de gestión de memoria a través de su programa, que hace que sea difícil de mantener. la semántica de la clase (y la forma en que maneja el recuento ref variables de instancia) se debe mantener a la clase, y seguir las convenciones de resultados esperados:
- (void)stuff:(NSString *)arg
{
const bool TheRightWay = false;
if (TheRightWay) {
NSMutableString * string = [arg mutableCopy];
[string appendString:@"2"];
self.a = string;
[string release];
// - or -
NSMutableString * string = [[arg mutableCopy] autorelase];
[string appendString:@"2"];
self.a = string;
}
else {
NSMutableString * string = [arg mutableCopy];
[string appendString:@"2"];
self.a = string;
[self.a release];
}
}
no seguir estas reglas simples hace que su código sea difícil de mantener y depurar y doloroso de extender.
por lo que el resto es que desea que su programa sea fácil de mantener. Llamar lanzamiento directamente en una propiedad requiere que conozcas mucho contexto del funcionamiento interno de la clase; eso es obviamente malo y echa de menos los fuertes ideales del buen OOD.
también espera que los autores/subclassers/clientes para saber exactamente cómo la clase se desvía de la convención, que es tonta y consume mucho tiempo cuando surgen problemas y hay que volver a aprender todos los detalles internos cuando surgen problemas (que en algún momento)
estos son algunos ejemplos triviales de cómo la publicación de llamadas en el resultado de una propiedad presenta problemas. muchos problemas del mundo real son mucho más sutiles y difíciles de localizar.
Esa es una recomendación muy peligrosa; el captador no siempre se verá así. De hecho, si fuera una propiedad 'atómica', sería -retain/-autorelease. – bbum