2013-10-18 73 views
0

我测试我的应用程序的iPod touch5并收到内存警告,UITableView的“接收内存警告”消息

我用我自己的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; 
} 

的TableView:

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

} 

回答

1

内存警告不是问题本身。 根据我对setImageWithURLRequest:的理解,它使用默认的NSURLCache来缓存图像,并且只要收到内存警告,缓存就会被系统释放。 你的记忆永远不会超过指定的限制。

顺便说一句,改进将是在细胞内部分配UIActivityIndicatorView。在你当前的代码中,每次单元被重用时你都要重新分配它...

+0

谢谢。我把activityIndi​​catorView放到我的自定义单元格中。 – jxdwinter