Custom Getter & Setter iOS 5

Quiero anular el getter y el setter en mi class ObjC usando ARC.

Archivo .h

@property (retain, nonatomic) Season *season; 

file .m

 @synthesize season; - (void)setSeason:(Season *)s { self.season = s; // do some more stuff } - (Season *)season { return self.season; } 

¿Me estoy perdiendo de algo?

Sí, esos son loops recursivos infinitos. Eso es porque

 self.season = s; 

es traducido por el comstackdor en

 [self setSeason:s]; 

y

 return self.season; 

se traduce en

 return [self season]; 

Deshágase del self. dot-accessor self. y su código será correcto.

Sin embargo, esta syntax puede ser confusa dado que su season properties y su season variable comparten el mismo nombre (aunque Xcode disminuirá la confusión al colorear esas entidades de manera diferente). Es posible cambiar explícitamente su nombre de variable escribiendo

 @synthesize season = _season; 

o, mejor aún, omite por completo la directiva @synthesize . El moderno comstackdor de Objective-C sintetizará automáticamente los methods de acceso y la variable de instancia para usted.

Si va a implementar su propio getter y setter, necesitará mantener una variable interna:

 @synthesize season = _season; - (void)setSeason:(Season *)s { // set _season //Note, if you want to retain (as opposed to assign or copy), it should look someting like this //[_season release]; //_season = [s retain]; } - (Season *)season { // return _season } 

Lo que te falta es que el comstackdor Objective-C básicamente convierte la syntax self.foo = bar en [self setFoo:bar] y self.foo en [self foo] . Sus methods, tal como están implementados actualmente, se autodenominan. Como sugiere Jeremy, debe implementarlos de tal manera que el progtwigdor asigne el valor al que está llamado con una variable de instancia en su class y el getter devuelva el valor de esa variable de instancia.