Я пытаюсь описать свое замешательство здесь. Дайте мне знать, если этот вопрос нуждается в каких-либо изменениях.
Таким образом, мы не можем установить значение свойства только для чтения, потому что его установщик не будет создан. Но я создал демонстрационный проект для проверки этого. Я делюсь с вами своим примером кода.
Это класс 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, даже если она доступна только для чтения. И почему строка добавляется в этот массив только для чтения.
Я провел этот тест выделения памяти с помощью NSString, также используя KVC, и получил тот же результат. Значение было установлено как строка только для чтения с использованием KVC.
Это мое замешательство относительно setValue для свойства только для чтения.
Итак, я что-то неправильно понял о свойстве только для чтения? или что-то еще происходит?