Correct, the `copy` qualifier causes the compiler to synthesize a setter that looks roughly like...

`
- (void)setObjectId:(NSNumber *)objectId
{
    if ([objectId isEqual:_objectId]) {
        return;
    }

    _objectId = [objectId copy];
}
`

That storage qualifier does not have any effect on the synthesized getter for an instance variable. My point is that you should serve your properties mostly as-is. If another object comes along and doesn't want their reference to some object to change out from under them, then the onus of copying is on them.