【发布时间】:2014-05-30 17:26:47
【问题描述】:
我在我的UITableView 的一些单元格中添加UIView。我使用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;
}
【问题讨论】:
-
没有代码无法诊断,您可以添加您的代码吗?
-
非常好的问题。你有什么证据?你如何证明细胞没有被重复使用?如果你是对的,那是因为你的
identifier:与单元格标识符不匹配。 -
顺便说一下,这里有一些示例代码,向您展示如何跟踪单元格是否被重用:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/…
-
我添加了一个 alpha = 0.2 的
UIImageView。当我向上和向下滚动时,它会变暗,这意味着它再次在前一张图片前面添加了一张新图片。 -
确实非常好:您已经检测到问题并很好地解释了问题。请参阅下面的答案。
标签: objective-c xcode uitableview uiview