моля, помогнете ми да разбера защо използваме @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 ще генерира getter и setter методи за вашата собственост. @dynamic просто казва на компилатора, че методите getter и setter се изпълняват не от самия клас, а някъде другаде
@property и @synthesis работят заедно, това ви помага да дефинирате сетер и гетер автоматично. В xcode 4.5 @synthesis не се изисква, компилаторът го добавя автоматично.