Как синтезируются указатели объектов в target-c? - PullRequest
0 голосов
/ 11 ноября 2011

Я новичок в Objective-C, и я работал с простыми программами, и мне было интересно, как бы вы синтезировали указатель на объект Objective-C.Так что, если бы у меня был простой заголовочный файл, например, такой:

//
//  Rectangle.h
//  Program 8

#import <Foundation/Foundation.h>
#import "XYPoint.h"

@interface Rectangle : NSObject
{
     XYPoint *origin;
}

- (XYPoint *) origin; // getter
- (void) setOrigin: (XYPoint *)pt; // setter
@end

Как вы синтезируете указатель объекта *origin с @property и @synthesize?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Как в интерфейсе .h:

@property (nonatomic, retain) XYPoint* origin;

Nonatomic не обязателен и может быть удален, что сделало бы свойство потокобезопасным. «Сохранять» означает, что счетчик ссылок будет увеличен, «Копия» является альтернативой этому, который копирует и увеличивает счетчик ссылок, «Назначить» - альтернатива, которая не очень безопасна для использования с объектами и больше предназначена для примитивных типов.

В реализации .m:

@synthesize origin;

или

@synthesize origin = _origin;

Если вам интересно, что делает _origin, то в ответе на этот вопрос есть отличное объяснение.

Не забудьте освободить ваши свойства в dealloc (или viewDidUnload - очевидно, не в том классе, который вы здесь пишете, а при работе с контроллером представления).

1 голос
/ 11 ноября 2011

Свойства используются, чтобы избежать шаблонного кода для получения и установки переменных. В приведенном выше случае вы бы не объявляли методы получения и установки в заголовке, а вместо этого объявляли свойство для источника и синтезировали его в своем файле реализации.

В интерфейсе (.h) используйте ОДИН из них, а НЕ все:

@property (retain) XYPoint* origin; // will increment the retain count (strong)
@property (copy) XYPoint* origin; // will make your own copy with retain count 1 (strong)
@property (assign) XYPoint* origin; // will not increase the retain count (not strong)

В реализации (.m):

@synthesize origin;

В зависимости от того, как вы собираетесь использовать «происхождение», вы можете сохранить его, скопировать или назначить только (см. Выше).

В зависимости от того, на какую ОС и версию вы нацеливаетесь, вам может не потребоваться объявлять фактическую переменную или синтезировать ее (если я не помню неправильно), само свойство достаточно.

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