Is there an actual reason why do we have to use @synthesize?
===

So I use the `@property` key in my header file.

*If* I do that, I should use the `@synthesize` key in my implementation, right? But I wonder, is there an actual *reason* I have to do that? I'm just wondering why isn't writing `@property` in the header just about enough for the code know my intentions (having the get/set methods automagically generated).

Sure, according to http://stackoverflow.com/questions/4966756/why-we-have-to-synthesize we write `@synthesize` to generate the get/set methods. But my question is about *why isn't `@property` in the header just enough for this*?
 I ask because whenever I write `@property` in my header, I immediately go to the implementation and write `@synthesize`. So for me, the only reason `@synthesize` is used is to complement the `@property` keyword. Which seems rather redundant, and makes me assume that `@synthesize` wouldn't exist if it wasn't because it *has other uses*.  What are those other uses?