Вопрос об освобождении объекта с помощью @property @synthesize - PullRequest
0 голосов
/ 17 августа 2011

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

Когда я использую @property и @synthesize, @synthesize заботится о выпуске исходного значения для объекта, который будет установлен?Т.е. если у меня есть:

@interface SomeClass:NSObject
{
    NSObject *object;
}

@property (nonatomic, retain) NSObject *object;
@end

@implementation SomeClass
@synthesize object;
@end

Это эквивалентно получению метода установки, который выглядит следующим образом?

-(void)setObject:(NSObject *)newObject
{
[object release];
object = [newObject retain];
}

Или я должен как-то позаботиться о том, чтобы освободить исходный объект сам?

Спасибо за разъяснения!

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Ответ - да.Сеттер и геттер сгенерированы для вас и хорошо сделаны, чтобы держать вас подальше от управления памятью:

-(void)setObject:(NSObject *)newObject {
  if (object != newObject) {
    [object release];
    object = [newObject retain];
  }
}

Чтобы освободить ваш объект, вы можете позвонить:

[self setObject:nil];
1 голос
/ 17 августа 2011

Нет необходимости выпускать исходный объект самостоятельно, однако вам все равно нужно очистить вещи в -dealloc.

...