Зачем псевдоним новое имя и явно освободить свойство IBOutlet? - PullRequest
0 голосов
/ 05 мая 2011

В последнее время некоторые примеры от Apple выглядят примерно так:

@interface ViewController : UIViewController
{
  **// Notice no more ivar here.**
}

@property (nonatomic, retain) IBOutlet UIWebView *webView;

@end

@implementation ViewController
@synthesize webView = _webView;

...

- (void)dealloc
{
  [_webView release];

  [super dealloc];
}

У меня вопрос, почему псевдоним от webView до _webView и выпуск в dealloc, поскольку нет ивара с именем _webView?

Еще один вопрос, если я объявляю свойство, которое не имеет связанного с ним ивара, нужно ли его выпускать в dealloc?

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Когда вы @synthesize свойство, которое не имеет связанного с ним ивара (говорите ли вы @synthesize property или @synthesize property=_property), для вас генерируется ивар. По умолчанию используется то же имя для ivar, что и для самого свойства. Если это свойство retain, тогда вам нужно release объект в -dealloc, иначе у вас будет утечка памяти.

Соглашение Apple состоит в том, чтобы называть ivars (независимо от того, объявлено ли оно явно в интерфейсе или неявно в @synthesize) с подчеркиванием, указывающим на закрытую природу ivar. ИМО также полезно обеспечить, чтобы люди использовали ивар только тогда, когда они намеревались (поскольку для некоторых кодировщиков, кажется, легко случайно набрать myproperty, когда вы имеете в виду self.myproperty, что может привести к значительным ошибкам).

Ответ на ваш последний вопрос в основном да, хотя технически ответ «иногда». Вы должны освободить объект только в том случае, если в иваре был сохранен объект. Это большую часть времени. Тем не менее, свойства - это просто ярлык для вызова методов с именами «myproperty» и «setMyproperty» (и т. Д.), Поэтому возможно иметь пару методов с этими именами и связанное свойство, у которого фактически нет ивара в паре с ним. Но если вы объявляете свойства с атрибутом retain и синтезируете их, вы всегда должны освобождать объекты, на которые указывают их ивары.

1 голос
/ 05 мая 2011

Я думаю Использование свойств шаблонами Xcode 4 объяснит это лучше и подробнее, чем я мог бы.

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