утечка памяти и переменные экземпляра - PullRequest
1 голос
/ 22 февраля 2011
-(void) getAccounts {

    self.selAccounts = [[NSMutableArray alloc] init];

    self.accounts = [[NSMutableArray alloc] init];  

    NSString *url=[NSString stringWithFormat:@"https://localhost//listaccts"];
    self.processor=[[AsynConnectionProcessorController alloc] init];
    self.processor.delegate=self;
    self.processor.server=self.server;
    [processor createRequestfromURL:url];



}

Этот метод вызывает утечку памяти при вызове.Теперь, если я заменил это на ниже

-(void) getAccounts {
        [accounts release];

    self.selAccounts = [[NSMutableArray alloc] init];

    accounts = [[NSMutableArray alloc] init];   

    NSString *url=[NSString stringWithFormat:@"https://localhost//listaccts"];
    self.processor=[[AsynConnectionProcessorController alloc] init];
    self.processor.delegate=self;
    self.processor.server=self.server;
    [processor createRequestfromURL:url];



}

Я получу утечку памяти, если я вызову этот метод во второй раз в результате того, что viewcontroller вырвался из стека.

Почему эта утечка?account - это переменная insyance с таким объявлением:

@property (nonatomic, retain) NSMutableArray *accounts;

Могу ли я предположить, что не будет утечки памяти, если я использую setter через self.accounts?

1 Ответ

3 голосов
/ 22 февраля 2011

Это неправильно

self.accounts = [[NSMutableArray alloc] init];  

установщик уже сохраняет, поскольку вы указали, что в свойстве

@property (nonatomic, retain) NSMutableArray *accounts;

вы должны переписать его следующим образом

   NSMutableArray arr = [[NSMutableArray alloc] init];
   self.accounts = arr;
   [arr release];

или альтернативно:

   self.accounts = [[[NSMutableArray alloc] init] autorelease];

РЕДАКТИРОВАТЬ: удалено «не предпочтительно» - было субъективным.

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