Sí, esos son bucles recursivos infinitos. Esto se debe a
self.season = s;
es traducida por el compilador en
[self setSeason:s];
y
return self.season;
se traduce en
return [self season];
Deshacerse de la de puntos de accesoself.
y su código será correcto.
Sintaxis, sin embargo, puede ser confusa dado que su propiedad season
y su variable season
comparten el mismo nombre (aunque Xcode disminuirá la confusión al unificar esas entidades de forma diferente). Es posible cambiar de forma explícita el nombre de la variable escribiendo
@synthesize season = _season;
o, mejor aún, omitir la directiva @synthesize
por completo. El compilador Objective-C moderno sintetizará automáticamente los métodos de acceso y la variable de instancia para usted.
Tenga en cuenta que este patrón conduce a la locura; en particular, significa que 'setSeason:' siempre debe ser una operación atómica integral en su modelo de datos. Si su código evolucionara de tal manera que existiera otra propiedad cuyo valor dependiera de 'season', entonces se quedaría con una dependencia de ordenamiento (" Debo configurar 'other' antes de llamar a 'setSeason:' porque 'setSeason:' tiene lógica empresarial que depende de 'otro'). Lo mejor es mantener el setter/getter estúpido simple y mantener la lógica de negocios por separado. – bbum
Bueno, en mi caso, voy a actualizar la vista con los nuevos datos de la 'temporada' ... – alex
Pero si mantienes al setter/getter estúpido simple y mantienes la lógica de negocios separada, acabas de mover el problema. Ahora debes recordar que cada vez que llamas a 'setSeason:' también tienes que llamar a 'someBusinessLogicBasedOnSeason:' y aún tiene que preguntarse si necesita hacer todo eso antes o después de configurar otro. – honus