我在UIView
的某些单元格中添加了UITableView
。我使用dequeueReusableCellWithIdentifier
似乎当我上下左右上下滚动时,视图永远不会从内存中删除,并且它会在已加载的视图前面添加新视图。它会永远增加内存,而不是应该的样子。
如何在不显示时从内存中删除这些UIViews
?
else if (indexPath.row == 0 && !isPremium) {
// Google AdMob
adCell = [tableView dequeueReusableCellWithIdentifier:adCellId];
if (adCell == nil) {
adCell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:adCellId];
}
AdMobView = [[GADBannerView alloc]initWithAdSize:kGADAdSizeSmartBannerPortrait];
AdMobView.adUnitID = @"ca-app-pub-XXXXXXXXXXXXXXX";
AdMobView.rootViewController = self;
AdMobView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
// load the ads
GADRequest *request = [GADRequest request];
request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, @"XXXXXXXXX", nil]; // COMMENT THIS LINE WHEN IN PROD
// add gps
if ([latitude length] > 2 && [longitude length] > 2) {
[request setLocationWithLatitude:[latitude floatValue] longitude:[longitude floatValue] accuracy:50]; // accuracy [m]
}
adCell.backgroundColor = [UIColor colorWithRed:247.0/255.0 green:149.0/255.0 blue: 24.0/255.0 alpha:1];
if (!AdMobView.superview) {
[AdMobView loadRequest:request];
}
AdMobView.tag = 3000;
[adCell.contentView addSubview:AdMobView];
[adCell setSelectionStyle:UITableViewCellSelectionStyleNone];
return adCell;
}
答案 0 :(得分:2)
如果正在重复使用单元格,但视图仍在堆积,那就是因为在cellForRowAtIndexPath:
中,您正在将视图添加到已经拥有该视图的已回收单元格。因此,当您向上和向下滚动时,视图的数量不断增加,在每个单元格中彼此叠加。
因此(现在您已经添加了一些代码),您说:
[adCell.contentView addSubview:AdMobView];
... 每个单元格,无条件。但如果一个单元格被重用,它已经有了一个AdMobView!您需要检查这一点,以便仅有条件地添加此子视图(对于您添加的任何其他子视图也是如此)。