Освобождение синтезированного свойства после alloc init - PullRequest
0 голосов
/ 09 января 2012

у меня есть свойство

//.h
@property (nonatomic, retain) SomeCLass * someSynthInstance;
//.m
@synthesize someSynthInstance = _someSynthInstance;

- (void) foo 
{
    self.someSynthInstance = [[SomeCLass alloc] init];
    //[self.someSynthInstance release]; <- SHOULD I RELEASE HERE???
}

- (void) dealloc 
{
    self.someSynthInstance = nil;
}

моя теория гласит, что [alloc, init] создает счетчик 1, и установщик, включая этот счетчик, становится равным 2, поэтому я должен выпустить его, сразу после

, но стремитесь получить exc_bad_access в приложении после того, как я изменил все, как это, так что цель не уверена, все ли в порядке

Ответы [ 4 ]

4 голосов
/ 09 января 2012

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

self.someSynthInstance = [[[SomeCLass alloc] init] autorelease]; // puts it in the autoreleasepool so it'll get released automatically at some point in the near future

или

_someSynthInstance = [[SomeCLass alloc] init]; // skip the property

или

self.someSynthInstance = [[SomeCLass alloc] init];
[_someSynthInstance release]; // call release on the instance variable
3 голосов
/ 09 января 2012

Стандартная практика:

SomeClass *tmpObj = [[SomeClass alloc] init];
self.someSynthInstance = tmpObj;
[tmpObj release];
2 голосов
/ 09 января 2012

вы должны вместо этого освободить переменную класса ... как [_someSynthInstance release];, которая должна добиться цели.

1 голос
/ 09 января 2012

да, вы должны освободить после инициализации

SomeCLass *temp = [[SomeCLass alloc] init];
self.someSynthInstance = temp;
[temp release]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...