仪器告诉我这段代码中有一个内存泄漏,但我似乎无法找到它....任何帮助?抱歉或新手问题。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
int altoBufferCelda = 26;
Mensaje *msg = (Mensaje *)[model.mensajes objectAtIndex:indexPath.row];
CGSize txtSize = [msg.texto sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(222, 222) lineBreakMode:UILineBreakModeTailTruncation];
[alturasDinamicas setObject:[NSNumber numberWithFloat:(txtSize.height + altoBufferCelda)] forKey:[NSNumber numberWithInt:indexPath.row]];
return txtSize.height + altoBufferCelda;
}
答案 0 :(得分:0)
<击> 我会说: [NSNumber numberWithFloat]
它将为您分配一个自动释放的对象。 iPhone不是垃圾收集,只是参考收集。并且由于您在离开方法之前没有释放您正在分配的内存,因此Instruments会将其报告为泄漏。
由于目前已经接受了,我会改变我的答案。
仪器不是神圣的法令。这可能是错的。使用它作为你应该看的内容的强有力的指导,但如果你真的找不到任何错误或泄漏代码,只需继续。
答案 1 :(得分:0)
我在代码中看不到任何内存泄漏。正如吐司指出的那样,仪器并不总是准确的。这主要是因为即使Apple Frameworks的代码也包含内存泄漏,也是由Instruments报告的。
如果您使用的是XCode 3.2,您可以从Build菜单中选择Build and Analyze,它会扫描您的代码,查找编译器通常无法检测到的错误。这将显示由于忘记释放对象而导致的许多可能的内存泄漏。