Я прочитал главу Переопределение свойства в Документе языка программирования Objective-C , и я хотел бы, чтобы некоторые из вас могли уточнить мне следующее объявление свойства:
// MyObject.h public header file
@interface MyObject : NSObject {
NSString *language;
}
@property (readonly, copy) NSString *language;
@end
// MyObject.m private implementation file
@interface MyObject ()
@property (readwrite, copy) NSString *language;
@end
@implementation MyObject
@synthesize language;
@end
Я просто хочу понять, производят ли приведенные выше ключевые слова @property
и @synthesize
следующий код:
// MyObject.h public header file
@interface MyObject : NSObject {
NSString *language;
}
-(NSString *)language;
@end
// MyObject.m private implementation file
@interface MyObject ()
-(void)setLanguage: (NSString *) aString;
@end
@implementation MyObject
-(NSString *)language {
return language;
}
-(void)setLanguage: (NSString *) aString {
[language release];
language = [aString copy];
}
@end
Итак, что происходит, когда компилятор видит первое @property
объявление и добавляет метод get в общедоступном интерфейсе ... затем, когда дело доходит до файла реализации, он находит другое объявление @property
для того же свойства, но с атрибутом readwrite в частном интерфейсе и добавляет только метод установки, так какgetter уже добавлен в общедоступный интерфейс. Затем найдено ключевое слово @synthesize
, и обе реализации добавлены в частный раздел реализации. Атрибут copy в первом объявлении @property
не требуется, так как установщиктам не нужно, но мы должны указать его, чтобы он соответствовал второмуПереопределение недвижимости.Мои мысли верны?