Синтезированные переменные экземпляра генерируются как частные вместо защищенных?
С недавних времен выполнения в 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
Спасибо за помощь!! Николя.