maybe this is a silly question. Every time I make a @property
I have to @synthesize
it. But this makes no sense the only thing you can do with a
In the current production compilers, the default -- the case without @synthesize
-- is to do nothing and then warn if an implementation isn't provided.
@synthesize
is automatic in the latest versions of the LLVM 2.0 compiler.
@dynamic
is not required when implementing the setter/getter yourself. @dynamic
is used when dynamically providing the implementations at runtime. That is, @dynamic foo;
combined with @property
will cause the compiler not to warn if you don't provide a -foo
and -setFoo:
implementation.
Note that you can also use @synthesize propertyName = instanceVariableName;
to use a specific, differently named, instance variable as the backing store.
@property
in the interface very much is short hand for the getter/setter method declarations. It also carries more metadata (retain, assign, etc..) that is leveraged by the compiler during @synthesize
.
And, as always, an atomic
property doesn't really help with thread safety.