发布UITableView时,UITableViewHeaderFooterView不会释放

时间:2017-04-11 10:25:35

标签: ios uitableview

我不知道为什么。用法很正常。

  1. viewDidLoad中的RegisterClass forHeaderFooterViewReuseIdentifier
  2. - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
  3. - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
  4. 就是这样。但是泄漏检测器MLeaksFinder警告UITableViewHeaderFooterView正在泄漏。在Instruments分配摘要中,当UITableView已经发布时,UITableViewHeaderFooterView会保持不变。

    这发生在iOS9和iOS10上。它没有被释放的可能原因是什么?

    当然是ARC

    显示代码

    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        if (self.dataSource.count == 0 || section != 0) {
            return nil;
        }
    
        XXXHistoryHeader *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:[XXXHistoryHeader reuseIdentifier]];
        view.frame = CGRectMake(0, 0, MZDApplicationFrame.size.width, 95);
        return view;
    }
    

    我的表只有1个第1节的标题。我已经尝试使用nil reuseIdentifier初始化它不起作用

    @interface XXXHistoryHeader : UITableViewHeaderFooterView
    
    @property (nonatomic, strong) UILabel *count;
    @property (nonatomic, strong) UILabel *money;
    
    - (void)setCount:(NSString *)count totalMoney:(NSString *)money;
    
    + (NSString *)reuseIdentifier;
    
    @end
    
    @implementation XXXHistoryHeader
    
    + (NSString *)reuseIdentifier
    {
        return NSStringFromClass(self);
    }
    
    - (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier
    {
        self = [super initWithReuseIdentifier:reuseIdentifier];
        if (self) {
            //not important
        }
        return self;
    }
    
    - (void)setCount:(NSString *)count totalMoney:(NSString *)money
    {
       //not important
    }
    
    - (void)dealloc
    {
        NSLog(@"dealloc!!!");
    }
    
    @end
    

1 个答案:

答案 0 :(得分:0)

将你的tableview作为weak引用,它可以解决你的问题,一些它无法释放它的内存,所以通过弱引用它可以帮助你的代码释放整个tableview从堆栈中删除类对象后。

谢谢