1

大家好,我有一个UITableViewAfNetworking用来加载非常大的图像的。但是,当它didreceivememorywarning被击中时,我的应用程序就会崩溃。这是我的代码:

AFNetworking+uiimageview.m我按照建议添加了这个:

@implementation AFImageCache

- (id)init
{
    self = [super init];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(didReceiveMemoryWarning)
                                                     name:UIApplicationDidReceiveMemoryWarningNotification
                                                   object:nil];
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    DebugLog(@"AFNetworking DID RECEIVED MEMORY WARNING ");
    [self removeAllObjects];
}

我在uitableview中的代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
        TousCell *tvCell;
        NSArray *nib;
        nib = [[NSBundle mainBundle] loadNibNamed:@"TousCell" owner:self options:nil];
        tvCell = [nib objectAtIndex:0];

        tvCell.lbltitle.text=[[dict valueForKey:@"message"]objectAtIndex:i];

[tvCell.imgPhoto setImageWithURL:[NSURL URLWithString: [NSString stringWithFormat:@"http://test.com/%@", [[dict valueForKey:@"photo"]objectAtIndex:i]]]];

可能是我cells每次都在重新创建吗?但我确信它链接到图像下载,因为图像有时很大(大小约为 2 - 3 Mb?)。

4

2 回答 2

1

2 或 3 MB 对于 UITableViewCell 中的缩略图来说太大了。而且您每次都在重新创建一个单元格。你应该使用

[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

提高性能

于 2013-07-31T08:09:52.280 回答
1

您每次都在重新创建表格单元格,因此如果图像不同,它们将占用大量空间。您必须使用

[tableView dequeReusableCellWithIdentifier:]
方法并在视图控制器视图中注册您的笔尖确实使用:

[tableView registerNib:forCellReuseIdentifier:]

方法。

另请注意,如果图像很大,AFNetworking 可以让您在返回给调用者之前缩小它们的大小。如果您需要在一个小单元格上放置一个大图像(例如来自表格视图的那个),这将特别有用。请注意,AFNetworking 不提供调整大小的功能,而是以两个不同的块返回图像:一个在后处理之前,一个在后处理之后。

于 2013-07-31T08:12:00.913 回答