自定义UITableViewCell initWithStyle多次调用

时间:2014-08-16 05:17:33

标签: ios objective-c iphone uitableview ios7

由于某些原因,在使用tableView cellForRowAtIndexPath方法时,我的自定义单元格被多次初始化。在我的自定义单元格中,我有一个自定义视图,可以使用AVPlayer播放AvItem。我的tableView cellForRowAtIndexPath方法看起来像这样

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{



   MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];



    if (cell==nil) {

        [tableView registerClass:[MyCustomCell class] forCellReuseIdentifier:@"cell"];
        cell = [[MyCustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
        cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    }

   MyCoreDataVideos *videos = [self.fetchedResultsController objectAtIndexPath:indexPath];
   NSURL * videoLocalURL = [[MyModel sharedInstance]localVideoDestinationFromVideoPath:videos.videoPath];
   AVPlayerItem *item = [AVPlayerItem playerItemWithURL:videoLocalURL];

     [cell.videoView.player setItem:item];
     [cell.videoView.player play];


return cell;


}  

我的自定义单元格的initWithStyle方法如下所示

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

        NSLog(@"I'm being called a lot of times ");

        _videoView = [[MyVideoPlayerView alloc]init];
        _videoView.frame = self.contentView.bounds;
        [self.videoView.player setShouldLoop:YES];
        [self.videoView setTapActionsEnabled:YES];
        self.contentView.clipsToBounds = YES;

        [self.contentView addSubview:_videoView];
        [self layoutSubviews];
       }
 return self;
}

单元初始化不止一次是正常的吗?我假设它会导致一些内存泄漏。

1 个答案:

答案 0 :(得分:0)

两个

cell = [[MyCustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

正在做同样的事情!

删除第一个,让UITableView进行单元重用。它会为你调用init。

此外,在iOS 6及更高版本中,还有一个dequeueReusableCellWithReuseIdentifier: indexPath:方法,如果您提前注册了一个类/ nib,它将始终返回一个单元格。真好!