我正在开发一款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];
答案 0 :(得分:0)
看起来serviceTypes
似乎没有被泄露。从您发布的代码中,serviceTypes
始终在方法结束时发布,并且在示例中的任何位置似乎都没有retain
。我的问题是:getServiceTypes:
内发生了什么。该方法是否保留serviceTypes
参数?
还有一件事。如果serviceRequestTypes
是一个实例变量(它看起来像是),那么你可能会通过重新分配内存而不先释放现有的serviceRequestTypes
对象来泄漏内存。您应该将serviceRequestTypes
重写为属性并使用合成访问器,或者确保在分配之前每次都释放它。如果它的当前值是nil
,那就没什么大不了的; release
消息将被忽略。例如:
[serviceRequestTypes release];
serviceRequestTypes = [[NSMutableArray alloc] initWithArray:[serviceTypes.types componentsSeparatedByString:SERVICE_TYPE_DELIMITER]];