setValue:forKey:operation?

fuz*_*oat 2 objective-c

我很好奇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)

加里

Fel*_*xyz 5

答案是肯定的,两个代码片段基本上做同样的事情.setValue:forKey不保留数组,但它找到合成的setMyArray_x方法,后者又保留数组.iVarName最好称为propertyName或keyName.但是,如果您没有声明并合成属性,而只是有四个ivars,setValue:forKey仍然可以将它们设置为指向animalArray 但不会保留.