Утечка памяти ASIHTTPRequest

У меня есть проект iOS, в котором я использую ARC в своих классах, но отключил ARC в других библиотеках, таких как ASIHTTPRequest.

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

-(void)buildPhotoView {

self.photoLibView.hidden = NO;

NSString *assetPathStr = [self.cellData objectForKey:@"AssetThumbPath"];

// get the thumbnail image of the ocPHOTOALBUM from the server and populate the UIImageViews
NSURL *imageURL = [NSURL URLWithString:assetPathStr];

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:imageURL];
__unsafe_unretained ASIHTTPRequest *weakRequest = request;
[weakRequest setCompletionBlock:^{

    // put image into imageView when request complete
    NSData *responseData = [weakRequest responseData];
    UIImage *photoAlbumImage = [[UIImage alloc] initWithData:responseData];
    self.photo1ImageView.image = photoAlbumImage;
}];
[weakRequest setFailedBlock:^{
    NSError *error = [request error];
    NSLog(@"error geting file: %@", error);
}];
[weakRequest startAsynchronous];

}

Я изменил пример кода с кодовой страницы примера ASIHTTPRequest, чтобы исключить предупреждения компилятора в Xcode.

Как я могу избавиться от этих утечек памяти? Кажется, я получаю их только при использовании блоков.

Ответ 1

Вы ссылаетесь на неверную переменную запроса из блока завершения. Вы должны ссылаться на request в блоке (почему вы объявляете его с идентификатором __block). На самом деле вам не нужно вообще объявлять weakRequest.

Если вы хотите, чтобы запрос хранился в памяти, сохраните его в @property (retain) в своем классе (возможно, с методом buildPhotoView).