С недавних времен выполнения в iOS мы можем определить свойства, которые будут генерировать методы доступа для переменных экземпляра. Насколько я понимаю, необязательно объявлять используемую переменную экземпляра, поскольку это будет сделано автоматически за нас.
Например, если я напишу:
@interface MyFirstClass
@property (readonly, nonatomic) int size;
@end
и в .м
@implementation MyFirstClass
@synthesize size;
@end
Затем для меня будет добавлена переменная экземпляра с именем "size" и будет реализован метод с именем "- (int) size".
Проблема в том, что когда я создаю второй класс MySecondClass, который является подклассом MyFirstClass, кажется, что я не могу получить доступ к размеру переменной экземпляра в этом подклассе:
@interface MySecondClass : MyFirstClass
@end
@implementation MySecondClass
- (id)init {
if (self = [super init]) {
size = 10; // this yields and error
}
return self;
}
@end
Являются ли автоматически созданные переменные экземпляра закрытыми? Есть ли возможность установить их как защищенные, чтобы я мог получить к ним доступ в подклассах?
Я знаю, что есть возможность объявить переменную экземпляра самостоятельно, но мне просто интересно ...
С таким суперклассом он работает: (Это потому, что он явно объявлен защищенным?)
@interface MyFirstClass {
int size; // defined expressly and used as @protected
}
@property (readonly, nonatomic) int size;
@end
Спасибо за вашу помощь !!
Nicolas.