Ios UITableViewCell及其ViewModel在内存中的持久性

Ios UITableViewCell及其ViewModel在内存中的持久性,ios,objective-c,uitableview,memory-management,mvvm,Ios,Objective C,Uitableview,Memory Management,Mvvm,我注意到在滚动表视图时,我的iOS应用程序内存消耗正在增加。使用分配工具,我发现一些表视图单元格没有保留,相应的视图模型也没有保留。是什么引起的?内存泄漏工具没有发现任何问题,我也没有看到任何能够将其保存到内存中的VM的强引用 以下是来自tableView委托/数据源的代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { i

我注意到在滚动表视图时,我的iOS应用程序内存消耗正在增加。使用分配工具,我发现一些表视图单元格没有保留,相应的视图模型也没有保留。是什么引起的?内存泄漏工具没有发现任何问题,我也没有看到任何能够将其保存到内存中的VM的强引用

以下是来自tableView委托/数据源的代码:

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

    id<STReactiveView> cell = [tableView dequeueReusableCellWithIdentifier:_cellId];
    STContact *contact;

    if(!_searchController.active) {
         contact = [[_arrangedData objectForKey:[_sectionTitles objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
    }
    else
        contact = [_filteredData objectAtIndex:indexPath.row];

    STContactsListItemViewModel *cellVM = [[STContactsListItemViewModel alloc] initWithContact:contact services:_services];
    [cell bindViewModel:cellVM];

    UITableViewCell *returnCell = (UITableViewCell *)cell;

   return returnCell;
}
最后但并非最不重要的是,分配的屏幕截图:

内存消耗是否持续增加?37 KB是一个相对较小的内存量。@ChanceHudson是的,它不断增加。在10-20秒的滚动时间内,我可以达到200kb。如果你发布的代码中没有任何循环保留,我会查看sd_setImageWithURL和rac_命令调用。但是没有看到STContactsListemViewModel的进一步实现,我看不到太多。内存消耗是否持续增加?37 KB是一个相对较小的内存量。@ChanceHudson是的,它不断增加。在10-20秒的滚动时间内,我可以达到200kb。如果你发布的代码中没有任何循环保留,我会查看sd_setImageWithURL和rac_命令调用。但是没有看到STContactsListemViewModel的进一步实现,我看不到太多。
@interface STContactViewCell()

@property (strong, nonatomic) IBOutlet UILabel *nameLabel;
@property (strong, nonatomic) IBOutlet UIButton *phoneButton;
@property (strong, nonatomic) IBOutlet UIButton *messageButton;
@property (strong, nonatomic) IBOutlet UILabel *statusLabel;
@property (strong, nonatomic) IBOutlet UIImageView *photoView;
@property (strong, nonatomic) IBOutlet UIImageView *statusImage;
@property (strong, nonatomic) STContactsListItemViewModel *viewModel;


@end

@implementation STContactViewCell

-(void)bindViewModel:(id)viewModel {

    _viewModel = viewModel;
    [self initialize];
}

-(void)initialize {
    self.nameLabel.text = _viewModel.contact.name;
    self.statusLabel.text = _viewModel.contact.statusText;
    self.photoView.contentMode = UIViewContentModeScaleToFill;

    if(_viewModel.contact.photo)
        [self.photoView setImage:_viewModel.contact.photo];
    else {
        if(_viewModel.contact.url.length)
            [self.photoView sd_setImageWithURL:[NSURL URLWithString:_viewModel.contact.url]];
        else
            [self.photoView setImage:[UIImage imageNamed:@"ContactPlaceholder"]];
    }


    [_statusImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"Status%@",_viewModel.contact.status]]];
    [_phoneButton setImage:[UIImage imageNamed:[NSString stringWithFormat:@"Phone%@",_viewModel.contact.status]]forState:UIControlStateNormal];
    [_phoneButton setImage:[UIImage imageNamed:[NSString stringWithFormat:@"Phone%@Dim",_viewModel.contact.status]]forState:UIControlStateHighlighted];
    [_messageButton setImage:[UIImage imageNamed:[NSString stringWithFormat:@"Message%@",_viewModel.contact.status]]forState:UIControlStateNormal];
    [_messageButton setImage:[UIImage imageNamed:[NSString stringWithFormat:@"Message%@Dim",_viewModel.contact.status]]forState:UIControlStateHighlighted];
    _photoView.layer.cornerRadius = _photoView.frame.size.width/2;
    _photoView.layer.masksToBounds = YES;
    [_photoView setContentMode:UIViewContentModeScaleAspectFill];

    _phoneButton.rac_command = _viewModel.executePhoneCall;
    _messageButton.rac_command = _viewModel.executeMessageSend;

    if([_viewModel.contact.status isEqualToString:@"Unavailable"]) {
        [_phoneButton setEnabled:NO];
        [_messageButton setEnabled:NO];
    }

}