views:

47

answers:

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

when i use [components release];

it crashes my application, how do i release components

when i run with leak instrument - my application crashes when it reaches usage of overall alloc 22MB

+2  A: 

The NSCalendar method components:fromDate: returns an autoreleased object; you must not call release on it yourself (unless you have first called retain).

Check out the Memory Management Rules

David Gelhar
+3  A: 

You must not release components yourself at all as it's set to autorelease by the NSCalendar object.

I suspect your leak is coming from your NSDate object that you pass to that line of code. You should probably assign that to a local variable, pass it to the [cal components] method then release the local variable:

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

Or, set the NSDate object itself to autorelease as you pass it as you are doing, use [NSDate date], which as David Gelhar commented will generate an autoreleased object, like so:

NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                      fromDate:[NSDate date]];
BoltClock
Quite right; the `[NSDate alloc]` causes a leak. Note that instead of using a temp and releasing it, you can also just use `[NSDate date]` to get an autoreleased `NSDate` object.
David Gelhar