Я пытаюсь описать свое замешательство здесь. Дайте мне знать, если этот вопрос нуждается в каких-либо изменениях.Возможно ли установить значение свойства readonly с использованием KVC в iOS?
Accordind для компании Apple documentaition:
Таким образом, мы не можем установить значение ReadOnly свойство, потому что это сеттер не будет создан. Но я создал демо-проект для тестирования этого. Я делюсь своим примером кода с вами.
Это класс "ModelTest1.h". Он имеет свойство readonly.
#import <Foundation/Foundation.h>
@interface ModelTest1 : NSObject
@property (readonly) NSMutableArray *arrTest;
@end
Теперь я устанавливаю значение в нем с помощью KVC. Поскольку это свойство является readonly, поэтому во время выполнения оно должно дать мне ошибку, но это не происходит.
- (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.
Я сделал этот тест распределения памяти с помощью NSString, также используя KVC и получив тот же результат. Значение было задано только для чтения с использованием KVC.
Это мое замешательство относительно setValue для свойства readonly.
Так что я что-то неправильно понял о свойствах readonly? или что-то еще происходит?
Спасибо матовой за такой быстрый ответ. Это очищает мое замешательство. Еще раз спасибо! –
Добро пожаловать. То, что вы делаете, вызывается довольно громко в моей книге: http://www.apeth.com/iOSBook/ch12.html#_key_value_coding_2 – matt
Я взглянул на вашу книгу, и я должен сказать, что это действительно впечатляет. Я определенно собираюсь изучить его. Благодаря! –