2013-11-13 5 views
0

Я хотел бы задать вам некоторое мнение о том, что я делаю. Я знаю, что это работает, но я не уверен, что я должен делать то, что делаю.Доступ к частному интерфейсу по общественному методу

У меня есть суперклассное здание, которому нужно разоблачить два NSString, имя и описание. Никто не должен изменять эти переменные отдельно от своих подклассов.

Чтобы получить этот результат, я создал два публичный метод в базовом классе:

@interface Building : NSObject 

- (NSString *)name; 
- (NSString *)description; 
@end 

Тогда на каждом подклассе Я создаю частный интерфейс с именем и описанием свойств и пусть волшебство произойдет.

@interface Barrack() 
@property (nonatomic, strong) NSString *name; 
@property (nonatomic, strong) NSString *description; 
@end 

@implementation Barrack 
@synthesize name, description; 
... 
@end 

То, что вы, ребята, думаете об этом? Это правильный способ получить такого рода результат, кто-нибудь есть идеи лучше по этой теме? Спасибо за ваше мнение.

Бест,

Энрико

ответ

3

Объявите свойства только для чтения в интерфейсе, READWRITE в расширении класса реализации. Нет необходимости в @synthesize. Это одна из основных причин расширения класса, добавленных в Objective-C.

в Building.h

@interface Building : NSObject 
@property (nonatomic, strong, readonly) NSString *name; 
@property (nonatomic, strong, readonly) NSString *description; 
@end 

В Barrack.m

@interface Barrack() 
@property (nonatomic, strong, readwrite) NSString *name; 
@property (nonatomic, strong, readwrite) NSString *description; 
@end 

@implementation Barrack 
... 
@end 
+0

Спасибо за ваш вклад Zaph, но не это решение делать то же самое, как у меня? Если вы не синтезируете свойство, атрибуты не используются, правильно? А также атрибут readwrite используется по умолчанию, поэтому в частном интерфейсе не требуется. Возможно, я не очень хорошо себя зарекомендовал, то, что я хотел бы обсудить, - лучший способ создать защищенные переменные в Objective-C и показать одну используемую мной реализацию, и я хотел бы знать, как вы, ребята, решаете эту проблему. –

+0

@ Enrico Да, это по сути делает то же самое только с использованием свойств readonly и readwrite, которые являются лучшими в настоящее время. Существующие средства разработки автоматически синтезируются так, что в большинстве случаев больше не нужны. Свойство readwrite необходимо, потому что публичное свойство объявляется readonly. Он должен быть обновлен readwrite в реализации, поэтому установщики могут использоваться в отличие от прямого доступа к базовому ivar. – zaph

Смежные вопросы