当我使用乐器运行我的iPhone应用程序时,它会显示当我来回显示模态视图控制器时的实时字节增长,但即使使用超过200 MB的应用程序也不会被杀死。
这到底发生了什么?我消耗了大量的内存? 顺便说一句,我正在使用带有ARC的iOS 7。
下图显示了实时字节。
谢谢。
更新: 我的模态视图控制器中的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ActionCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
Action *action = self.actions[indexPath.section][indexPath.row];
cell.textLabel.text = action.title;
cell.textLabel.textColor = self.sectionColors[indexPath.section];
CustomCellBackgroundView *customCellBackgroundView = [[CustomCellBackgroundView alloc] init];
customCellBackgroundView.borderColor = self.sectionColors[indexPath.section];
customCellBackgroundView.fillColor = [self.sectionColors[indexPath.section] colorWithAlphaComponent:0];
if ([self.actions[indexPath.section] count] == 1) {
customCellBackgroundView.position = CustomCellBackgroundViewPositionSingle;
} else if (indexPath.row == 0) {
customCellBackgroundView.position = CustomCellBackgroundViewPositionTop;
} else if (indexPath.row == [self.actions[indexPath.section] count] - 1) {
customCellBackgroundView.position = CustomCellBackgroundViewPositionBottom;
} else {
customCellBackgroundView.position = CustomCellBackgroundViewPositionMiddle;
}
cell.backgroundView = customCellBackgroundView;
return cell;
}
模态视图控制器将弱委托保存到调用模态的主视图控制器。 并且没有[self.presentedViewController dismissViewControllerAnimated:YES completion:NULL];发布模态视图控制器的好(及其所有子视图和变量)?
顺便说一句,CustomCellBackgroundView可能不是问题,因为我有另一个模态视图控制器以相同的方式使用它,但不会增加内存使用量。
奇怪的是,即使使用了200 MB,应用程序也没有被杀死,为什么(不在模拟器上运行,在实际的iPhone上运行)?
答案 0 :(得分:0)
这是一个花了我一些时间来理解的问题,但即使方舟很神奇,也有助于分配!您不能编写复杂的应用程序代码,并在没有您的帮助的情况下抛弃所有数据管理以供ARK处理。
每个viewController,你必须有一个“ViewWillDissapear”方法,在那里,你需要将你使用的每个对象都变为nil,所以ARK知道它可以摆脱它。
//重要 如果你在你的应用程序中使用图像,那么通过将它们变为零来释放它们非常重要。 如果你使用任何上下文,你必须手动释放! 在岸上,你不是要保持每个以太之上的曼尼观点! 如果您使用音频文件,则必须在以后发布!
最后一点,请确保您没有对不需要强引用的对象进行“强”引用。因为他们永远不会被释放。
希望这有帮助, 快乐的编程。
答案 1 :(得分:0)
我很抱歉这个愚蠢的问题,这是一个新手的错误,问题是我通过调用存储在我的视图控制器中的块内的self方法来创建一个保留周期。