член в стиле c в obj-c - PullRequest
       3

член в стиле c в obj-c

1 голос
/ 24 ноября 2010

Я заметил, что не могу использовать @property / @synthesize для переменных-членов, которые являются массивами в obj-c. Например, член var int mVar [5] не может использовать @ property / @ synthesize.

Однако я заметил, что я могу установить эти переменные просто, не используя self.mVar [n], а вместо этого используя mVar [n].

Может ли кто-нибудь объяснить, почему это работает, если это хорошая или ужасная практика, и какую альтернативу мне следует использовать, если это не хорошая практика?

1 Ответ

2 голосов
/ 24 ноября 2010

Свойства являются синтаксическим сахаром для методов set / get-style.Передача массивов как параметров и возвращаемых значений с помощью этих методов чревата проблемами семантики и производительности, поэтому они, вероятно, просто помещают их в слишком сложную корзину и намеренно исключают их.

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

Если вы хотите сделать содержимое массива доступным как свойство (что вам нужно только сделатьесли вы хотите сделать содержимое общедоступным), вы можете выставить его как:

@property (readonly) int *vars;
@property (readonly) int numVars;

Или вы можете сделать вещь Objective-C:

@property (nonatomic, retain) NSArray *vars;

Но тогда вам придетсясоздать множество объектов NSNumber (ick).

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