Objective c 查找内存泄漏时仪器中的颜色

Objective c 查找内存泄漏时仪器中的颜色,objective-c,xcode,memory-leaks,instruments,Objective C,Xcode,Memory Leaks,Instruments,我目前正在查找iPhone应用程序中的内存泄漏。我正在使用工具来追踪导致泄漏的代码(越来越成为工具的朋友!)。现在仪器显示两条线:一条是深蓝色(第146行),另一条是浅蓝色(第150行)。从一些尝试和错误中,我发现它们之间有某种联系,但在Objective-C和内存管理方面还不够好,还不能真正理解它们是如何联系在一起的 有人知道为什么会使用不同的颜色吗?我的问题是什么 我曾试图发布numberForArray,但当在选择器视图中显示最后一行时,应用程序崩溃 感谢所有的想法 (发布这篇文章时,

我目前正在查找iPhone应用程序中的内存泄漏。我正在使用工具来追踪导致泄漏的代码(越来越成为工具的朋友!)。现在仪器显示两条线:一条是深蓝色(第146行),另一条是浅蓝色(第150行)。从一些尝试和错误中,我发现它们之间有某种联系,但在Objective-C和内存管理方面还不够好,还不能真正理解它们是如何联系在一起的

有人知道为什么会使用不同的颜色吗?我的问题是什么

我曾试图发布numberForArray,但当在选择器视图中显示最后一行时,应用程序崩溃

感谢所有的想法


(发布这篇文章时,我还意识到第139行是多余的!这里已经有了改进;-)

好的,让我们看看这段代码的对象分配/所有权行为

numberForArray
被分配了
-NSString stringWithFormat:
的结果,这是一个自动释放的对象。这意味着您不想发布它(正如您所发现的)

然后将该对象添加到
glucoseLoader
NSMutableArray,该数组将
保留它。循环100次,创建100个对象并将它们添加到glucoseLoader
。当
glucoseLoader
被释放时,在第154行,它还将释放添加到其中的所有对象

但是等等,还有更多:
firstComponentRange
是使用
-NSArray initWithArray:
glucoseLoader
创建的。执行此操作时,源数组的所有元素都将添加到目标,目标将再次保留它们


那么,何时/如何释放
firstComponentRange

仪器告诉您firstComponentRange没有被释放(小泄漏)。由于数组保留了它的内容,因此您还泄漏了100个NSString实例,这些实例分配在用较暗的条带表示的行上(更严重的泄漏)

始终显式初始化变量,即使您的语言为您这样做。当您在不同语言之间切换时,或者当其他人查看您的代码时,或者当您在代码周围放置循环时,会让人感到困惑。这绝对不会影响性能,因为现代编译器只会在冗余的情况下删除它。@colithium我不反对这个建议,但我不知道它如何适用于这个问题。代码显示中唯一的变量声明是在第140行,其中包括初始化…“发布此消息后,我还意识到第139行是多余的!在那里,已经有了改进”我假设这就是他在问题中所指的这一行。好的,我现在明白你的意思了。在本例中,我认为这不是“语言为您做这件事”的情况,而是OP意识到变量在使用之前总是在for循环中赋值,因此在进入循环之前将其设置为0是多余的。感谢David提供的信息丰富且正确的答案。有一段时间我都快发疯了,忘记了自动释放的事情。我在选择器中使用firstComponentRange,所以现在我在ViewWillEnglish中释放该数组。再次感谢!嗨,巴里,谢谢。我当时是这样想的,不幸的是,这让我以错误的顺序看待问题。正如您在我给David的回复中所看到的,真正的问题是我的firstComponentRange。我现在没有泄密:-)但我想这就是事实。你在实践中学习。。。