From "4.1.1 Property declarations" in the Clang/ARC documentation
(emphasis added):
copy
implies __strong
ownership, as well as the usual behavior of copy semantics on the setter.
- ...
A property’s specified ownership is preserved in its metadata, but
otherwise the meaning is purely conventional unless the property is
synthesized.
If a property is synthesized, then the associated instance variable is
the instance variable which is named, possibly implicitly, by the
@synthesize declaration. If the associated instance variable already
exists, then its ownership qualification must equal the ownership of
the property; otherwise, the instance variable is created with that
ownership qualification.
So in your case, with a custom setter, declaring the property as "copy" implies that the associated
instance variable _property
is __strong
but nothing else.
It is your responsibility that the setter actually makes a copy, for example:
- (void) setProperty:(NSObject *)property
{
_property = [property copy];
// Some more code here
}