开发者

memory release with alloc

开发者 https://www.devze.com 2023-01-09 16:19 出处:网络
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];

when i use [components release];

it开发者_StackOverflow中文版 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


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]];


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

0

精彩评论

暂无评论...
验证码 换一张
取 消