我注意到我的iOS应用程序内存消耗正在增加,而我正在滚动表格视图。使用Allocations工具我发现一些表视图单元格没有被保留,相应的视图模型根本没有保留。可能导致什么呢?内存泄漏仪器没有发现任何问题,我也没有看到任何可以将其保存到内存中的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;
}
从细胞类:
@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];
}
}