#iphone #objective-c #cocoa-touch
#iPhone #objective-c #cocoa-touch
Вопрос:
Могу ли я просто проверить, что происходит, когда вы делаете следующее (см. Ниже), я прав, думая, что никакие IVARS не создаются в «ИНТЕРФЕЙСЕ» только с тремя свойствами. В «РЕАЛИЗАЦИИ» эти три свойства присваиваются иварам с именами _window
, _animationTimer
amp; _currentFrame
, которые создаются @synthesize
командой?
// INTERFACE
@interface testDelegate : NSObject ... {
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, assign) NSTimer *animationTimer;
@property (nonatomic, assign) int currentFrame;
...
.
// IMPLEMENTATION
@implementation testDelegate
@synthesize window = _window;
@synthesize animationTimer = _animationTimer;
@synthesize currentFrame = _currentFrame;
...
Ответ №1:
Да, именно так это работает. @synthesize
теперь можно автоматически генерировать соответствующие переменные экземпляра, а также средства доступа к ним. Это относительно недавняя разработка в языке.
Комментарии:
1. Добавим к этому, что если бы вы только что сделали
@synthesize propertyName
, это создало бы переменные экземпляра с теми же именами, что и свойства, по-прежнему не нужно их нигде объявлять.2. Скажем, я бы создал
@property (nonatomic, assign, readonly) BOOL isValid;
без синтеза, но внедрив средство получения. Увеличит ли это размер каждого экземпляра класса?3. @Jenox: Нет, это было бы не так. Ни свойства (как таковые), ни методы не влияют на размер экземпляров.
4. Хорошо, спасибо. Просто чтобы убедиться, что я правильно понял это, еще один вопрос: если я хотел бы иметь свойство ivar с пользовательскими способами получения и установки, мне все равно нужно было бы синтезировать его, чтобы создать ivar, правильно?
5. @Jenox: Это, или вы могли бы просто объявить ivar.