我想在这里描述我的困惑。如果这个问题需要修改,请告诉我。
Accordind to Apple documentaition:
因此我们无法将值设置为只读属性,因为它的setter不会被创建。 但是我已经创建了一个用于测试它的演示项目。我正在和你分享我的代码示例。
这是" ModelTest1.h"类。它有一个只读属性。
#import <Foundation/Foundation.h>
@interface ModelTest1 : NSObject
@property (readonly) NSMutableArray *arrTest;
@end
现在我使用KVC在其中设置值。因为这个属性是只读的,所以在运行时它应该给我一个错误,但它没有发生。
- (void)readonlyTest
{
ModelTest1 *obj1 = [ModelTest1 new];
NSLog(@"obj1.arrTest before = %@",obj1.arrTest);
[obj1 setValue:[NSMutableArray new] forKey:@"arrTest"];
NSLog(@"obj1.arrTest after = %@",obj1.arrTest);
[obj1.arrTest addObject:@"Str 1"];
NSLog(@"obj1.arrTest after 2 = %@",obj1.arrTest);
[obj1 release];
}
输出是:
我不知道为什么内存在NSMutableArray中被分配,即使它只是readonly。 为什么字符串会添加到此只读数组中。
我使用KVC使用NSString进行了内存分配测试并获得了相同的结果。使用KVC将值设置为只读字符串。
这是我对readonly属性的setValue的困惑。
所以我误解了一些关于readonly财产的事情?或者还有其他事情发生了?