我需要在此代码示例中释放NSCalendar对象吗?或者这会影响最后一行代码是返回newDate这个派生自“gregorian”变量的事实吗?
#import "NSDateHelper.h"
@implementation NSDate(NSDateHelper)
-(NSDate *) setHour:(NSInteger)hour andMinute:(NSInteger)minute {
// Get Calendar for Existing Date
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: self];
// Set Hour and Minute
[components setHour: hour];
[components setMinute: minute];
[components setSecond: 00];
// Create resultant Date
NSDate *newDate = [gregorian dateFromComponents: components];
// Clean Up
[gregorian release]; // TODO: Do I release this here, or will it affect the return value not being valid?
return newDate;
}
@end
答案 0 :(得分:4)
是的,你释放。
您的组件变量将保留其所需的内容。由于您通过分配NSCalendar获得所有权,因此您有责任释放它。
ps:为名为set的方法设置返回值非常奇怪。我建议重构以避免以后出现很多混淆。
答案 1 :(得分:1)
分配它的对象也应该释放它,除非使用自动释放。
此示例中未使用自动释放,因此您必须确实将其释放。
答案 2 :(得分:1)
发布很好,newDate
会返回一个autorelease
,因此会一直停留NSAutoreleasePool
。如果newDate
需要对日历实例的引用,它将在内部处理保留计数。