我试图在这里描述我的困惑。让我知道这个问题是否需要任何修改。
所以我们不能将 value 设置为 readonly 属性,因为它的 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 中分配内存,即使它是只读的。以及为什么将字符串添加到此只读数组中。
我也使用 KVC 对 NSString 进行了这个内存分配测试并得到了相同的结果。使用 KVC 将值设置为只读字符串。
这是我对只读属性的 setValue 的困惑。
那么我对只读属性有误解吗?还是有其他事情发生?