Правильно ли я освобождаю память? - PullRequest
1 голос
/ 26 октября 2010

У меня есть следующий вспомогательный объект:

LikeHelper* likeHelper = [[LikeHelper alloc]init];
likeHelper.delegate = self;
[likeHelper performLike:self.messageID];
[likeHelper release];likeHelper=nil;

executeLike выполнит некоторые действия NSURLConnection, а затем сообщит делегату, успешно ли это произошло.

#pragma mark LikeHelperDelegate Methods
-(void)performLikeFinished:(BOOL)isSuccessful{
    if (isSuccessful) {
        UIAlertView *alertView;
        alertView = [[UIAlertView alloc] initWithTitle:@"Success!" message:@"The message has been liked" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    }
    else {
        UIAlertView *alertView;
        alertView = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"There was a problem liking your message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    }

}

Я выпускаю likeHelper в нужном месте?

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Если executeLike: метод является асинхронным, likeHelper, вероятно, будет освобожден до вызова executeLikeFinished: метод. Вы должны выпустить likeHelper в dealloc: метод объекта-владельца или в executeLikeFinished: реализация в LikeHelperDelegate, чтобы предотвратить его выпуск слишком рано, но если вы это сделаете, учтите комментарий JeremyPs ниже!.

Если метод executeLike: синхронный, вы делаете все правильно, но вам не нужен делегат для сбора результата.

0 голосов
/ 26 октября 2010

Да, ваш код соответствует рекомендациям.

Если ваш код не работает, проблема может заключаться в том, что LikeHelper нужно сохранить self из -[LikeHelper performLike:].

Вы также не должны сохранять LikeHelperDelegate, что может быть еще одной причиной путаницы или ошибок.

...