Содержимое someArray является изменяемым, хотя свойство - нет (т. Е. Вызов не может изменить значение переменной экземпляра someArray
путем присвоения этому свойству). Обратите внимание, это отличается от семантики C ++ const
. Если вы хотите, чтобы массив действительно был доступен только для чтения (то есть не изменяемый читателем), вам нужно обернуть его специальным средством доступа. В @interface
(при условии вашего someArray
свойства)
@property (readonly) NSArray *readOnlyArray;
и в @implementation
@dynamic readOnlyArray;
+ (NSSet*)keyPathsForValuesAffectingReadOnlyArray {
return [NSSet setWithObject:@"someArray"];
}
- (NSArray*)readOnlyArray {
return [[[self someArray] copy] autorelease];
}
Обратите внимание, что вызывающая сторона все еще сможет изменять состояние объектов в массиве. Если вы хотите предотвратить , что , вам нужно сделать их неизменными при вставке или выполнить depp-копию массива в методе доступа readOnlyArray
.