Почему свойства Objective-C вроде неудобны? - PullRequest
3 голосов
/ 26 июля 2010

Это скорее жалоба, чем вопрос, хотя, возможно, у кого-то есть на это хорошие моменты. Поэтому, если вы хотите, чтобы у ивара в вашем классе Objective-C были методы доступа, вы должны упомянуть об этом 3 раза

SomeClass* _ivar;
@property (nonatomic,retain/assign/copy) SomeClass* ivar;
@synthesize ivar = _ivar;

и, возможно, 4-й раз в методе dealloc. Поэтому не было бы удобнее, если бы подход был похож на аннотации в стиле Java - в одном месте до фактического объявления ivar, просто что-то вроде:

@property (nonatomic,retain,synthesize = ivar,dealloc) SomeClass* _ivar; 

это также генерирует методы доступа, и dealloc - говорит об освобождении ивара в методе dealloc.

Ответы [ 2 ]

6 голосов
/ 26 июля 2010

На самом деле вам не нужно объявлять ivar - они могут быть синтезированы, если вы просто объявите свойство для них.Это должно синтезировать имя iVar для вас: (хотя не поддерживается в устаревших средах выполнения, поэтому одна из причин этого, казалось бы, избыточного синтаксиса - для обратной совместимости с устаревшими платформами)

@interface MyClass : NSObject 
{
}

@property(copy) NSString *name;

@end

...
@synthesize name;

В новой версии XCode4.0, вероятно) вам также не нужно использовать @synthesize - свойства будут синтезированы по умолчанию.

Итак, как вы видите, цель-c развивается в соответствии с вашими желаниями:)

0 голосов
/ 30 декабря 2011

К сожалению, Xcode 4 автоматически не синтезирует свойства.Но с ARC (автоматический подсчет ссылок) вам больше не нужно беспокоиться о dealloc и переменных экземпляра.

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