2011-05-04 58 views
1

我坚持可可内存Managagment。RetainCount内存

- (IBAction) createPush:(UIButton *)sender { 
    [create setEnabled:NO]; 
    [release setEnabled:YES]; 

    aLocation = [[Location alloc] init]; 

    // Put some Example Stuff in the Class 
    aLocation.title = @"Apartment"; 
    aLocation.street = @"Examplestreet 23"; 
    aLocation.zip = @"12345"; 
    aLocation.city = @"Exampletown"; 
    aLocation.http = @"http://google.com"; 
    aLocation.info = @"First Info Text"; 
    aLocation.info2 = @"Second Info Text, not short as the first one"; 
    aLocation.logoPath = @"http://google.de/nopic.jpg"; 

    [aLocation.pictures addObject:@"http://google.de/nopic.jpg"]; 
    [aLocation.pictures addObject:@"http://google.de/nopic.jpg"]; 
} 

- (IBAction) releasePush:(UIButton *)sender { 
    [release setEnabled:NO]; 
    [create setEnabled:YES]; 

    [aLocation release]; 
    aLocation = nil; 
} 

此代码工作正常,如果我设置或获取变量,但是当我称之为“最后”的释放(所以保留计数为0),它的dealloc aLocation的方法被调用,但在仪器分配你看,没有回忆。

这里位置的来源:

http://homes.dnsalias.com/sof/Location.m 同一链路上与“.H”而不是“.M”为头文件(很抱歉,因为Spaming规则的)。

而且整个项目:http://homes.dnsalias.com/sof/Location.zip

感谢您的帮助,哪里是我的失败?丹尼斯

+0

这是执行'aLocation'的所有代码吗?它不会被放入数组中,例如? – 2011-05-04 18:59:01

+0

是的,这是所有!如果你想仔细观察下载源代码。 – 2011-05-04 19:53:30

回答

1

此代码工作正常,如果我设置或获取 变量,但是当我称之为“最后” 版本(所以保留计数为0),它aLocation的 dealloc方法被 叫,但在仪器分配 你会看到没有记忆被回馈。

你是什么意思“没有内存还给”是什么意思?

尽管命名奇怪,aLocation的内存管理是正确的是上面的代码(假设你已经在dealloc中发布了它)。


为什么不内存使用减少当单个对象被释放?

(意译)

很可能是你的对象是相对较小的,因此,该单个释放低于〜20K左右,需要仪器显示出来。

如果您的应用由于内存使用问题崩溃,寻找一个释放错误的地方开始。要做的第一件事就是回答为什么你的应用程序正在增加内存以及对增长负责的原因。

配置分配仪器只跟踪实时分配。然后按总内存使用进行排序。这会告诉你什么类型的分配消耗最多的内存。从减少开始。

Heapshot analysis可以在这些情况下是非常有效的。

+0

谢谢你的好链接。我以前不知道,我认为这应该对我有帮助。 – 2011-05-05 19:35:24

0

其他相关信息在这里,因为连接的最大数目,我have'nt机会发表图片...

你是什么意思“没有内存还给”是什么意思?

我会告诉你仪器运行,那么它应该很清楚。 Screenshots from Instruments run

如果需要更多详细信息请点击here进行仪器运行。

+0

新的答案,因为链接限制... – 2011-05-05 09:20:02

0

你的代码很好。您错误地记录了仪器的输出。没有Location对象泄漏。

对于泄漏,请使用“泄漏”工具。它不会开火。 :-)

+0

好吧,听起来不错。但是,当我释放aLocation对象时,为什么不减少内存使用情况。这对我来说不是很清楚。问题是,这个类是一个更大的项目的一部分,如果你使用应用程序的内存使用量是巨大的,应用程序崩溃。 – 2011-05-05 10:00:55