开发者

ASIHTTPRequest memory leaks

I have a iOS project in which I am using ARC in my own classes, but have ARC turned off in other libraries like ASIHTTPRequest.

I'm getting huge memory leaks using the code below to fetch an image from a web server:

-(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];

}

开发者_C百科

I've modified the sample code from the ASIHTTPRequest example code page to eliminate compiler warnings in Xcode.

How can I get rid of these memory leaks? I only seem to get them when using blocks.


You're referencing the wrong request variable from inside the completion block. You should reference request in the block (that's why you declare it with the __block identifier). In fact, you shouldn't need to declare weakRequest at all.

If you want the request to be kept in memory, store it in an @property (retain) in your class (the one with the buildPhotoView method perhaps).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜