我很好奇setValue发生了什么:forKey:在下面的代码片段中:它只是将指针设置为指向每个数组,类似于......
[self setMyArray_1: animalArray];
[self setMyArray_2: animalArray];
[self setMyArray_3: animalArray];
Run Code Online (Sandbox Code Playgroud)
另外:setValue:forKey保留数组吗?我猜它确实(如上所述)
代码片段:
// INTERFACE
@property(nonatomic, retain) NSArray *myArray_1;
@property(nonatomic, retain) NSArray *myArray_2;
@property(nonatomic, retain) NSArray *myArray_3;
// IMPLEMENTATION
@synthesize myArray_1;
@synthesize myArray_2;
@synthesize myArray_3;
for(counter=1; counter<=3; counter++) {
NSArray *animalArray = [[NSArray alloc] initWithObjects:@"cat", @"rat", nil];
NSString *propertyName = [[NSString alloc] initWithFormat:@"myArray_%d", counter];
[self setValue:animalArray forKey:propertyName];
[animalArray release];
[propertyName release];
}
Run Code Online (Sandbox Code Playgroud)
加里
答案是肯定的,两个代码片段基本上做同样的事情.setValue:forKey不保留数组,但它找到合成的setMyArray_x方法,后者又保留数组.iVarName最好称为propertyName或keyName.但是,如果您没有声明并合成属性,而只是有四个ivars,setValue:forKey仍然可以将它们设置为指向animalArray 但不会保留.