gpt4 book ai didi

ios - UITableView “received memory warning” 消息

转载 作者:行者123 更新时间:2023-11-29 03:33:45 26 4
gpt4 key购买 nike

我正在使用 iPod touch5 测试我的应用程序并收到内存警告,

我正在使用自己的 UITableViewCell ,如何改进我的代码?非常感谢。

单元格:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code

self.frame = CGRectMake(0.0, 0.0, 320.0, 255.0);


self.shot_imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10.0, 0.0, 300.0, 225.0)];
[self addSubview:self.shot_imageView];

UIImageView *viewsImageView = [[UIImageView alloc] initWithFrame:CGRectMake(15.0, 231.0, 13.0, 13.0)];
viewsImageView.image = [UIImage imageNamed:@"eye"];
[self addSubview:viewsImageView];

self.viewsLabel = [[UILabel alloc] initWithFrame:CGRectMake(33.0, 230.0, 65.0, 15.0)];
[self addSubview:self.viewsLabel];

UIImageView *likesImageView = [[UIImageView alloc] initWithFrame:CGRectMake(150.0, 233.0, 10.0, 10.0)];
[self addSubview:likesImageView];

self.likesLabel = [[UILabel alloc] initWithFrame:CGRectMake(165.0, 230.0, 45.0, 15.0)];
[self addSubview:self.likesLabel];


UIImageView *commentsImageView = [[UIImageView alloc] initWithFrame:CGRectMake(270.0, 233.0, 10.0, 10.0)];
[self addSubview:commentsImageView];

self.commentsLabel = [[UILabel alloc] initWithFrame:CGRectMake(285.0, 230.0, 35.0, 15.0)];
[self addSubview:self.commentsLabel];
}

return self;
}

表格 View :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger section = [indexPath section];

static NSString *CellIdentifier = @"Cell";
Shots *shot = [self.dataSource objectAtIndex:section];
//NSString *url = shot.image_url;
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if ( cell == nil )
{
cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

//[cell.shot_imageView setImageWithURL:[NSURL URLWithString:shot.image_url] placeholderImage:[UIImage imageNamed:@"placeholder"]];
UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicatorView.center = cell.shot_imageView.center;
[activityIndicatorView startAnimating];
[cell.shot_imageView addSubview:activityIndicatorView];
__weak typeof(cell) weakCell = cell;
[cell.shot_imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:shot.image_url]]
placeholderImage:[UIImage imageNamed:@"placeholder"]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
[activityIndicatorView stopAnimating];
[activityIndicatorView removeFromSuperview];
weakCell.shot_imageView.image = image;
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
[activityIndicatorView stopAnimating];
[activityIndicatorView removeFromSuperview];
[weakCell.shot_imageView setImage:[UIImage imageNamed:@"placeholder"]];
}];

cell.likesLabel.text = [NSString stringWithFormat:@"%@",shot.likes_count];
cell.viewsLabel.text = [NSString stringWithFormat:@"%@",shot.views_count];
cell.commentsLabel.text = [NSString stringWithFormat:@"%@",shot.comments_count];
cell.selectionStyle = UITableViewCellSelectionStyleNone;

return cell;

}

最佳答案

内存警告本身不是问题。根据我对setImageWithURLRequest:的理解,它使用默认的 NSURLCache 来缓存图像,每当收到内存警告时,系统就会释​​放缓存。您的内存不应以这种方式增加超过分配的限制。

顺便说一下,一个改进是分配 UIActivityIndicatorView在细胞内。在您当前的代码中,每次重新使用单元格时都会重新分配它...

关于ios - UITableView “received memory warning” 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19444008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com