Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
The NSCopying copyWithZone: implementation does not check isSet. This causes the copy not to be a true copy, since all the isSet properties will be set to YES on the newly copied object.
Note, updating to provide some more clarity:
In this example, it's fixed:
- (instancetype) copyWithZone:(NSZone *)zone { Foo * val = [Foo new]; if (_nameIsSet) { val.name = [self.name copy]; } return val; }
Without the if check on _nameIsSet, the newly copied object will have _nameIsSet set to YES but with a nil name.
- (void) setName: (NSString *) name { _name = name; _nameIsSet = YES; }
Attachments
Issue Links
- links to