пожалуйста, помогите мне узнать, почему мы используем @property
и @synthesis
? Где нам нужно использовать @dynamic
? Спасибо.
Использование @Dynamic
Ответы (3)
@property
является объявлением accessors
. Это просто декларация. Между ними очень небольшая разница. Проверьте здесь
Характеристики
Когда мы ранее писали методы доступа для подписи и автора, вы могли заметить, что код прост и, вероятно, может быть обобщен.
Свойства — это функция в Objective-C, которая позволяет нам автоматически генерировать методы доступа, а также имеет некоторые другие дополнительные преимущества. Давайте преобразуем класс Photo для использования свойств.
Вот как это выглядело раньше: #import
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
- (NSString*) caption;
- (NSString*) photographer;
- (void) setCaption: (NSString*)input;
- (void) setPhotographer: (NSString*)input;
@end
Вот как это выглядит после преобразования в свойства:
#import <Cocoa/Cocoa.h>
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
@property (retain) NSString* caption;
@property (retain) NSString* photographer;
@end
@property — это директива Objective-C, которая объявляет свойство. «Сохранить» в скобках указывает, что установщик должен сохранить входное значение, а остальная часть строки просто указывает тип и имя свойства.
Теперь давайте посмотрим на реализацию класса:
#import "Photo.h"
@implementation Photo
@synthesize caption;
@synthesize photographer;
- (void) dealloc
{
[caption release];
[photographer release];
[super dealloc];
}
@end
Директива @synthesize автоматически генерирует для нас сеттеры и геттеры, поэтому все, что нам нужно реализовать для этого класса, — это метод Dealloc.
@synthesize создаст методы получения и установки для вашего свойства. @dynamic просто сообщает компилятору, что методы получения и установки реализованы не самим классом, а где-то еще
@property и @synchronous работают вместе, это помогает вам автоматически определить сеттер и геттер. В xcode 4.5 @синтез не требуется, компилятор автоматически добавляет его.