使用alloc释放内存

时间:2010-07-29 16:38:54

标签: objective-c memory-leaks

NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];

当我使用[components release];

它崩溃我的应用程序,我如何发布组件

当我使用泄漏仪器运行时 - 我的应用程序在达到使用整体alloc 22MB

时崩溃

2 个答案:

答案 0 :(得分:3)

由于components对象设置为自动释放,因此您不得自行释放NSCalendar

我怀疑您的泄漏来自您传递给该代码行的NSDate对象。您应该将其分配给局部变量,将其传递给[cal components]方法然后释放局部变量:

NSDate *today = [[NSDate alloc] init];
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                      fromDate:today];
[today release];

或者,NSDate对象本身设置为自动释放,因为您正在执行它,使用[NSDate date],正如David Gelhar所评论的那样将生成一个自动释放的对象,像这样:

NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                      fromDate:[NSDate date]];

答案 1 :(得分:2)

NSCalendar方法components:fromDate:返回一个自动释放的对象;你不能自己打电话给release(除非你先叫retain)。

查看Memory Management Rules