Общедоступное свойство Readonly объявлено как readwrite в частном интерфейсе. - PullRequest
2 голосов
/ 27 сентября 2011

Я прочитал главу Переопределение свойства в Документе языка программирования 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 не требуется, так как установщиктам не нужно, но мы должны указать его, чтобы он соответствовал второмуПереопределение недвижимости.Мои мысли верны?

1 Ответ

3 голосов
/ 27 сентября 2011

Да, ваше понимание верно.

Также обратите внимание, что в Objective-C нет строго частных методов.Внешний абонент все еще может позвонить setLanguage:.Компилятор выдаст предупреждение, но сообщение получится во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...