2011-05-21 70 views
2

我一直在困惑这几天。我仍然试图围绕Objective-C中的内存管理进行讨论。在Xcode中没有检测到内存泄漏的仪器

这里是我的代码段(凝聚为清晰起见):

- (void)performOperation:(NSString *)operation 
{ 
    if ([@"+" isEqual:operation]) 
    { 
     waitingOperation = operation; 
    } 
    else if ([@"C" isEqual:operation]) 
    { 
     waitingOperation = nil; 
    } 

} 

waitingOperation仅仅是本土民营的NSString(没有@property,没有@synthesize,没有getter/setter方法)。

当我将waitingOperation指向nil时,它应该不是内存泄漏,当它指向堆上的NSString时?我对这个方法的调用是在一个从UILabel display.text传入NSString的ios应用程序中。我一直在用仪器分析这个代码,我从来没有看到任何泄漏。我真的很感激这方面的一些澄清。提前致谢。

回答

1

您尚未通过致电retainwaitingOperation提出所有权索赔,因此您对release不承担任何责任。

如果字符串是在其他地方发布的(例如通过处置UILabel),这可能会在某些时候出现问题,在这种情况下,您将留下一个悬挂指针。但是你在这里没有泄漏任何东西。

+0

非常感谢。我认为这是有道理的。我实际上误报了UILabel。这真的是UIButton。我发现在应用程序的整个生命周期内,堆上的每个按钮都存在一个对象。没有泄漏,我的临时指针指向这些按钮对象是安全的应用程序的持续时间。我希望我能正确理解这一点。 – darkhorse 2011-05-21 14:10:21

+0

此外,这种形式建议或应该保留,然后释放这个UIButton对象内的iOS应用程序? – darkhorse 2011-05-21 14:18:39

+0

@Tom如果按钮位于NIB文件中,则无需单独进行管理。但是,如果您以某种方式存储和使用对像按钮这样的对象的引用,这种方式可能会超出其容器的范围,那么您需要明确管理该外部所有权。 – walkytalky 2011-05-21 15:15:32