2010-07-09 135 views
0
-(void)setMedicineList:(NSString*)btnText:(NSString*)kana:(NSString*)skana 

{ 

    if(mdcnList != nil) 
    { 
    [mdcnList release]; 
    } 

    mdcnList = [[MedicineList alloc]getMedicineList:btnText:kana:skana]; // Memeory leak 

    [medListView setMdcnList:mdcnList]; 


    [btnText release]; 
    //[mdcnList release]; // Not work 
} 

如何釋放mdcnList以避免「在線576上分配的對象的潛在泄漏」警告? 「getMedicineList」是另一個功能。 MedicineList是類。在線576上分配的對象的潛在泄漏

回答

0

我不確定你的「//不工作」是什麼意思 - 你的意思是[mdcnList release]導致了一個問題?

假設是這樣,該行應該被取消註釋。問題可能是[medListView setMdcnList:]不保留對mdcnList的引用,當它應該是。

+0

如何保留對mdcnList的引用。我已經在.h文件中將它定義爲retain屬性。 – Dhaval 2010-07-10 04:06:47

+0

這聽起來正確。您的代碼在這裏: [[MedicineList alloc] getMedicineList:btnText:kana:skana]; 不會調用「init」 - 它應該是[[[MedicineList alloc] init] getMedicalLine:...]? 您需要取消註釋發行版,因爲這絕對應該在那裏。 – JosephH 2010-07-10 09:29:34

0

我假設mdcnList是一個屬性。如果它被定義爲retain,你應該使用的訪問,而不是釋放伊娃,和手動設置它...

更換

if(mdcnList != nil) { [mdcnList release]; } 
mdcnList = [[MedicineList alloc]getMedicineList:btnText:kana:skana]; 

通過類似:

self.mdcnList = [ [ [ MedicineList alloc ] getMedicineList: btnText: kana: skana ] autorelease ]; 

正如你可以看到,我們正在自動釋放對象,因爲它將被訪問器自動保留。

+0

謝謝。但上面的解決方案不起作用。警告:在線692上分配的對象的潛在泄漏 1.方法返回帶有+1保留計數的Objective-C對象(擁有引用) 2.在692行分配的對象不再在此點之後引用,並且具有保留+1(對象泄露) – Dhaval 2010-07-10 03:49:18