我正在编写一个图片库,可以通过网址加载AFNetworking
。
在Init
对象的ImageView
方法中,我调用了一个发送请求的函数。这里:
- (void) loadWithUrl:(NSURL *)url
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:TimeOut];
[request setHTTPShouldHandleCookies:NO];
[request setHTTPShouldUsePipelining:YES];
__weak AOWImageView *safeSelf = self;
m_operation = [AFImageRequestOperation imageRequestOperationWithRequest:request
imageProcessingBlock:nil
success:^
(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
{
[safeSelf setImage:image];
}
failure:^
(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
{
[safeSelf setNoImageLabelOpaque];
}];
[m_operation start];
}
如果ImageView
位于屏幕可见部分之外,则会调用- (void) dealloc
。我在此方法中取消操作加载图像,因此:[m_operation cancel];
。我猜这些操作没有被取消,因为内存正在增加而且没有被释放。
我认为有保留周期。我想了解如何写得正确。感谢。
答案 0 :(得分:3)
我在您发布的代码段中没有看到保留周期,因此如果您泄漏内存,可能是应用程序代码的另一部分...
关于AFNetworking
的“最佳做法”并加载图片 -
AFNetworking
在UIImageView
上有一个内置类别,其中包含通过网址设置图像视图图像的便捷方法。
请参阅UIImageView+AFNetworking
,特别是setImageWithURL:
方法和相关内容。这也有保留缓存的优势(因此,如果多次请求,您不必再次获取图像),而AFAIK似乎并未由AFImageRequestOperation
完成。