【问题标题】:Potential leak of an object allocated on line 576在第 576 行分配的对象的潜在泄漏
【发布时间】:2010-07-09 14:16:30
【问题描述】:
-(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 是类。

【问题讨论】:

    标签: iphone xcode


    【解决方案1】:

    我不确定你的“// 不工作”是什么意思 - 你的意思是 [mdcnList 版本] 导致了问题?

    假设是这样,那一行应该被取消注释。问题很可能是 [medListView setMdcnList:] 没有保留对 mdcnList 的引用,但它应该保留。

    【讨论】:

    • 如何保留对 mdcnList 的引用。我已经将它定义为 .h 文件中的保留属性。
    • 听起来是对的。你的代码在这里:[[MedicineList alloc]getMedicineList:btnText:kana:skana];不调用“init”-应该是 [[[MedicineList alloc] init] get MedicineLine:...] 吗?您需要取消注释发布行,因为它肯定应该在那里。
    【解决方案2】:

    我假设mdcnList 是一个属性。如果定义为retain,则应该使用访问器,而不是释放iVar,手动设置...

    替换

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

    通过类似的方式:

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

    如您所见,我们正在自动释放对象,因为它会被访问者自动保留。

    【讨论】:

    • 谢谢。但上述解决方案不起作用。警告:在第 692 行分配的对象的潜在泄漏 1. 方法返回具有 +1 保留计数(拥有引用)的 Objective-C 对象 2. 在此点之后不再引用在第 692 行分配的对象,并且保留计数为+1(对象泄露)
    猜你喜欢
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    相关资源
    最近更新 更多