如果我使用性能工具测试我的代码 - 泄漏,它没有检测到任何泄漏。这是否意味着代码没有泄漏任何内存?
我有一个越狱的 iPhone,我可以监控可用内存。如果有人知道,那就是 SBSettings。我测试了我的应用程序,它有一个 UITableView,当我滚动 tableView 时,我可以看到可用内存下降。从 300MB 到 30MB,似乎不能再下降了。对于游戏以外的其他应用程序,它通常不会下降太多。我正在使用带有 2 个按钮、1 个 TextView 和 3 个 UILabel 的自定义 UITableViewCell。
所以,是的。如果性能工具未检测到任何泄漏,我安全吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"StatusTableCell";
StatusTableCell *cell = (StatusTableCell *)
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle]
loadNibNamed:@"StatusTableCell"
owner:nil options:nil];
for (id currentObjects in topLevelObjects){
if ([currentObjects isKindOfClass:[StatusTableCell class]]){
cell = (StatusTableCell *) currentObjects;
phá vỡ;
}
}
[cell.cancelButton addTarget:self action:@selector(cancelButton:) forControlEvents:UIControlEventTouchUpInside];
}
/// some other stuff
return cell;
}
不,您不一定安全。
当程序不再引用某个对象时,就会发生内存泄漏。因此,如果一个对象被释放,但它保留的对象没有被释放(例如,在 dealloc 方法中没有正确释放),就会发生泄漏。
但是,如果所属对象本身从未被释放,则不会检测到泄漏。
要查找此类内存问题,请运行分配工具工具。单击 Mark Heap 按钮,并在应用程序中执行某种可重复的操作(例如,在表格 View 中选择一行以将详细 View 推送到导航堆栈,然后点击返回按钮)。再次点击标记堆按钮。然后重复这个 Action 几次。理想情况下,您应该看不到堆增长,并且在堆发射之间没有持久对象。
Tôi là một lập trình viên xuất sắc, rất giỏi!