使用UIImageView + AFNetworking.h时因内存压力而终止?

时间:2014-04-01 06:33:53

标签: objective-c memory-leaks didreceivememorywarning

我正在使用AFnetwroking  UIImageView + AFNetworking.h在我的imageview中为UITabelviw和UICollectionview提供图像

我使用的代码:

    NSString *str = [NSString stringWithFormat:@"http://www.hdwallpapers.in/walls/lovely_roses_hq-wide.jpg"];
    NSURL *imgrl =[NSURL URLWithString:str];
    NSLog(@"ImageMB url %@",imgrl);
    [cell.profilePic setImageWithURL:imgrl placeholderImage:[UIImage imageNamed:@"default.png"]];

我在应用程序中使用此代码在UITableview和UICollectionview中显示图像。我的应用程序正在崩溃并显示“由于内存压力而终止。”

请解决我的问题。

由于 拉姆亚

2 个答案:

答案 0 :(得分:0)

假设您使用默认的sharedImageCache,则不应该有内存警告。

+ (id <AFImageCache>)sharedImageCache {
    static AFImageCache *_af_defaultImageCache = nil;
    static dispatch_once_t oncePredicate;
    dispatch_once(&oncePredicate, ^{
        _af_defaultImageCache = [[AFImageCache alloc] init];

        [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * __unused notification) {
            [_af_defaultImageCache removeAllObjects];
        }];
    });

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu"
    return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: _af_defaultImageCache;
#pragma clang diagnostic pop
}

正如您所看到的,它会监视内存警告。我的猜测是,你每次填充它时可能会在你的细胞中添加一个新的imageview吗?

在我们进一步提供帮助之前,我们需要查看更多代码。

答案 1 :(得分:0)

我没有使用任何sharedImageCache,并且单元格没有重新分配内存。它已经在uicollectionvew自定义单元格中创建,并通过cell.profilepic使用它。

我创建了一个UICollectionView缺陷布局

通过使用asepct raito,我调整了图像大小。

CGSize CGSizeAspectFit(CGSize aspectRatio, CGSize boundingSize)
{
float mW = boundingSize.width / aspectRatio.width;
float mH = boundingSize.height / aspectRatio.height;
if( mH < mW )
    boundingSize.width = boundingSize.height / aspectRatio.height * aspectRatio.width;
else if( mW < mH )
    boundingSize.height = boundingSize.width / aspectRatio.width * aspectRatio.height;
return boundingSize;
}

计算尺寸并为其创建Cell。并使用以下代码显示图像:

  Photo *photoData = [self.photosListArray objectAtIndex:indexPath.item];

//[cell.displayImage setImageWithURL:[photoData photoURL]];
// Here we use the new provided setImageWithURL: method to load the web image
NSLog(@"photo url %@",[photoData photoURL]);
[cell.displayImage setImageWithURL:[photoData photoURL]
                  placeholderImage:nil];
//user profile pic
NSString *str = [NSString stringWithFormat:@"http://www.hdwallpapers.in/walls/%@",photoData.userProfilePic];
NSURL *imgrl =[NSURL URLWithString:str];
NSLog(@"Image url %@",imgrl);
[cell.userProfilePic setImageWithURL:imgrl placeholderImage:[UIImage imageNamed:@"default_profilepic.png"]

这是我的代码,请建议我任何可能的答案,以避免记忆压力。

由于