I jumped in to a project and I see that the other developers are adding a lot of logic in the setters of synthesized properties.
I understand how this works, but I think that it makes it hard to understand the flow of the program; while reading the code, whenever I see self.something = whatever, I always check if something's setter is overridden.

What are your opinions around this topic? Do you think this is a sign of bad architecture or an elaborate solution? 

I would be glad to read more on this if you have relevant links/sources, it's just too hard to get good google results so I decided to ask here as well.

Thanks for any answer and please note that I'm talking about objective C in case you haven't seen the tag (even though this shouldn't be a language specific issue I guess).


  Is it considered a bad practice to add logic in a property setter?


No 

Properties were invented to allow class designers to have logic attached to a convenient interface of field access and assignment.

How much is too much?  It depends on the responsibilities of the class.  Here are some things that are reasonable to put in a property setter:


update some derived values
notify observers that the class state has changed
propagate the change to some contained object
propagate the change to a backing store
perform validation


Programming is easier when classes have interfaces that make it obvious what the class can do, without making callers think about how it is being done.  Putting logic behind property setters allows classes to hide their implementation behind a simple interface.  For some classes, no methods are required.  Just turn the knobs by setting properties and read the output by getting properties.
