为什么仪器报告泄漏?

时间:2010-06-11 19:51:02

标签: iphone

我正在开发一款iPhone应用程序。 Instruments报告了一个泄露的对象ServiceTypes。以下是相关代码。有没有人有任何想法?非常感谢你的帮助。

ServiceTypes *serviceTypes = [[ServiceTypes alloc] init];

if ([userConnection getServiceTypes:serviceTypes]) {
    if ([serviceTypes.types length] > 0) {
        NSArray *array = [[NSArray alloc] initWithArray:[serviceTypes.types componentsSeparatedByString: SERVICE_TYPE_DELIMITOR]];
        serviceRequestTypes = [[NSMutableArray alloc] initWithArray:array];
        [array release];
    }
}

[[self typesTableView] reloadData];
[serviceTypes release];

1 个答案:

答案 0 :(得分:0)

看起来serviceTypes似乎没有被泄露。从您发布的代码中,serviceTypes始终在方法结束时发布,并且在示例中的任何位置似乎都没有retain。我的问题是:getServiceTypes:内发生了什么。该方法是否保留serviceTypes参数?

还有一件事。如果serviceRequestTypes是一个实例变量(它看起来像是),那么你可能会通过重新分配内存而不先释放现有的serviceRequestTypes对象来泄漏内存。您应该将serviceRequestTypes重写为属性并使用合成访问器,或者确保在分配之前每次都释放它。如果它的当前值是nil,那就没什么大不了的; release消息将被忽略。例如:

[serviceRequestTypes release];
serviceRequestTypes = [[NSMutableArray alloc] initWithArray:[serviceTypes.types componentsSeparatedByString:SERVICE_TYPE_DELIMITER]];