2010-06-11 88 views
0

我正在開發一個iphone應用程序。儀器報告泄漏的對象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

它看起來不像serviceTypes正在泄漏。從您發佈的代碼中,serviceTypes總是在該方法結束時發佈,並且您的示例中的任何位置似乎都不是retain。我的問題是:getServiceTypes:內發生了什麼。該方法是否保留serviceTypes參數?

還有一件事。如果serviceRequestTypes是一個實例變量(它看起來像是這樣),那麼您可能會通過重新分配內存而泄漏內存,而不會首先釋放現有對象serviceRequestTypes。您應該重寫serviceRequestTypes作爲屬性並使用合成訪問器,或者確保在分配前每次釋放它。如果它的當前值是nil,沒什麼大不了的; release消息將被忽略。例如:

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