我有一个代表人的NSArray
。我使用Person
类的一个属性来过滤数组,并使用谓词来获取另一个NSArray
。
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"Favorite == %@", @"YES" ];
NSArray *favorites = [people filteredArrayUsingPredicate:predicate];
新NSArray
,favorites
是否维护人员的副本或指向旧NSArray
,people
的引用?如果有人更改了Favorite
数组中某个对象的属性favorites
,它会自动更新people
数组中的该对象吗?
答案 0 :(得分:3)
新阵列不会复制。您对原始对象有正常引用,因此,如果其中一个属性发生更改,您将通过两个数组看到新值。数组在创建之后根本没有连接;情况与:
相同NSString * s = @"Cabbage crates coming over the briny!";
NSString * t = s;
您对同一个对象有两个单独的引用。
如果您需要,您必须制作明确的副本:
NSMutableArray * favorites = [NSMutableArray array];
for( Person * person in people ){
if( [predicate evaluateWithObject:person] ){
[favorites addObject:[person copy]];
}
}
(如果不使用ARC,则向复制的对象添加autorelease
(或者,更好的是,启用ARC)。)
这需要您implement copy
为您的班级。