Потому что вы установили его как @property и заявили это в заголовочном файле.Переменная, которую вы задали как @property, автоматически сгенерирует getter и setter для этой переменной, и они оба являются публичным методом для ее получения или установки (переменная по-прежнему закрыта).Если вы действительно хотите сделать свойство закрытым, вы должны указать его в файле .m, и оно станет частным.Вы можете использовать эту переменную только в файле .m.
Например, в своем файле .h
@interface ClassWithPrivateProperty : NSObject {
@private
NSString* member;
}
- (void) trySettingPrivateProperty;
@end
в своем файле .m
#import "ClassWithPrivateProperty.h"
@interface ClassWithPrivateProperty ()
@property (nonatomic,retain) NSString* member;
@end
@implementation ClassWithPrivateProperty
@synthesize member;
- (void) trySettingPrivateProperty {
self.member = @"A Value";
NSLog(@"myClass.member = %@", self.member);
}
@end
Выможете проверить более подробно в Личные свойства для iPhone Objective-C
Редактировать:
Спасибо за комментарий Абизерна и Пола, но на самом деле я ничего не получил ошибку компиляции для этой программы.
Я думаю, что вопрос RIP: «Почему я установил переменную в @private, но я все еще могу изменить переменную как instance.variable»
Ответ - хотя он установил переменную как @private, но требуйте @property для переменной в файле .h также предоставьте открытые методы getter и setter.Поэтому он все еще может получить переменную экземпляра, используя instance.variable
.Для шаблона проектирования ООП вы не должны публично выставлять свои внутренние данные.Так что если вы хотите использовать переменную только в частном порядке в своем классе, и никто не знает об этом.И вы все еще хотите использовать getter и setter для доступа к этой переменной в своем классе.вы должны требовать @property в файле .m, как я делал выше.Я утверждаю, что @property в .m файле, это расширение @interface (безымянная категория).Таким образом, вы можете сделать это «как» частным.Потому что вы не можете получить доступ к этой переменной из-за пределов этого класса.Так что это похоже на "private @property", о котором я упоминаю.
Две полезные статьи для вас Открытые свойства с частными установщиками и Частные свойства для iPhone Objective-C