Iphone 从[NSDateComponents:fromDate:toDate:options:]释放NSdate时出错
好的,我有一个叫做“事件”的课程 它有一个名为eventDate的属性,它是一个NSDate。我使用了一种方法返回自事件日期起的年份:Iphone 从[NSDateComponents:fromDate:toDate:options:]释放NSdate时出错,iphone,nsdate,nsdatecomponents,Iphone,Nsdate,Nsdatecomponents,好的,我有一个叫做“事件”的课程 它有一个名为eventDate的属性,它是一个NSDate。我使用了一种方法返回自事件日期起的年份: - (double)yearsSinceEvent { double years; // Get the system calendar NSCalendar *sysCalendar = [NSCalendar currentCalendar]; // Create the NSDates NSDate *date1
- (double)yearsSinceEvent {
double years;
// Get the system calendar
NSCalendar *sysCalendar = [NSCalendar currentCalendar];
// Create the NSDates
NSDate *date1 = self.eventDate;
NSDate *date2 = [NSDate date];
// Get conversion to months, days, hours, minutes
unsigned int unitFlags = NSYearCalendarUnit;
NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:date1 toDate:date2 options:0];
years = [conversionInfo year];
[date1 release];
[date2 release];
return years;
}
配置tableview单元格时,我会执行以下操作:
cell.textLabel.text = [[events objectAtIndex:indexPath.row] name];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d year's ago", [events objectAtIndex:indexPath.row] yearsSinceEvent]];
但这就产生了一个错误:
***_uunsAutoReleaseFreedObject():忽略先前释放的对象(0x595bda0)的释放
我做错了什么
如果我不释放date1和date2,我不会得到错误,但该方法返回0
如果我改为在cell配置方法中使用yearsSinceEvent代码,并且不发布日期1和日期2,那么它可以工作
我该怎么做呢?您不应该发布date1和date2,因为它们已经自动发布了。确保eventDate ivar正确声明为保留属性:它应该是
@property(非原子,保留)NSDate*eventDate代码>您不应该发布date1和date2,因为它们已经自动释放。确保eventDate ivar正确声明为保留属性:它应该是@property(非原子,保留)NSDate*eventDate
在这种情况下,您不应发布date1
和date2
。
date2
使用工厂方法创建,并将自动删除。
date1
是您从另一个属性中读取而不保留它的内容,因此您不应释放该属性或self.eventDate将被释放
如果您拥有一个对象,您将获得该对象的所有权
使用名为
以“alloc”或“new”开头,或
包含“复制”(例如,alloc,
newObject或mutableCopy),或者
向它发送一条保留消息。你是
负责放弃
您拥有的对象的所有权使用
释放或自动释放。其他时间
你收到一个对象,你不能
放开它
在这种情况下,您不应发布date1
和date2
。
date2
使用工厂方法创建,并将自动删除。
date1
是您从另一个属性中读取而不保留它的内容,因此您不应释放该属性或self.eventDate将被释放
如果您拥有一个对象,您将获得该对象的所有权
使用名为
以“alloc”或“new”开头,或
包含“复制”(例如,alloc,
newObject或mutableCopy),或者
向它发送一条保留消息。你是
负责放弃
您拥有的对象的所有权使用
释放或自动释放。其他时间
你收到一个对象,你不能
放开它
谢谢大家!我觉得自己很愚蠢。我应该看到的。复制了代码并对其进行了更改。。我不是舒尔,为什么我在移除释放时返回0。。我认为我保留了NSDate值。。回家后我会检查。方法返回0的原因是[conversionInfo year]返回NSInteger。我把我的替身改成了NSIntegers,效果很好!谢谢大家!我觉得自己很愚蠢。我应该看到的。复制了代码并对其进行了更改。。我不是舒尔,为什么我在移除释放时返回0。。我认为我保留了NSDate值。。回家后我会检查。方法返回0的原因是[conversionInfo year]返回NSInteger。我把我的替身改成了NSIntegers,效果很好!