1
据我所知,如果一个对象属性有一个可变的子类,一个属性应该是copy
而不是strong
,以防止该变量在没有该类的许可的情况下进行变异。为了充分理解原理,我使用strong
创建了两个不同的示例,但我不理解第二个示例的结果。属性属性 - 强大还是复制示例?
@interface Person: NSObject
@property (nonatomic, strong) NSArray* siblings;
@end
@implementation Person
//init - initialize empty siblings array
//setter
- (void)setSiblings:(NSArray *)siblings{
_siblings = siblings;
}
@end
实施例1:
int main{
NSMutableArray* siblings = [@[@"Nikita"] mutableCopy];
Person* person = [Person alloc] init];
//This calls the setter and creates a strong
//reference to the siblings array above
person.siblings = siblings;
NSLog(@"1: %@ ", person.siblings);
//Here I am able to change the siblings array and that
//change will reflect inside the person.siblings instance variable
[siblings addObject:@"Andre"];
NSLog(@"2: %@ ", person.siblings);
}
Output:
1: (Nikita)
2: (Nikita, Andre)
实施例2:
int main{
NSMutableArray* siblings = [@[@"Nikita"] mutableCopy];
Person* person = [Person alloc] init];
//This calls the setter and creates a strong
//reference to the siblings array above
person.siblings = siblings;
NSLog(@"1: %@ ", person.siblings);
//Here the change is not reflected in person.siblings instance variable
siblings = [@[@"Andre"] mutableCopy];
NSLog(@"2: %@ ", person.siblings);
}
Output:
1: (Nikita)
2: (Nikita)
为什么,在第二示例中,当我改变的siblings
值是不更改为person.siblings
?