【问题标题】:NSDate* getting corrupted after a few render cycles. Why?NSDate* 在几个渲染周期后损坏。为什么?
【发布时间】:2010-09-23 09:22:47
【问题描述】:
  • 我有一个间隔为 1.5 秒(渲染周期)的通用计时器。
  • 我有一个具有 NSDate* 成员/属性(非原子,保留)的类。
  • 我通过调用 [callingClass setDate:expirationDate] 设置此日期;

现在......这个 NSDate 的几个渲染周期是有效的。然而,在第 3 个周期左右,这个变量的值似乎被破坏了。

当我设置断点时,我注意到我可以将鼠标悬停并看到正确显示的数据(当它有效时)。但是当它无效时,我要么看到“超出范围”,要么看到一些奇怪的字符串(看起来有点像库文件名或其他东西),或者在极少数情况下调试器不会向我显示任何变量的值(我讨厌在 xcode 中调试)。

所以这就是为什么我认为这个变量以某种方式被破坏了。 我应该将此合成属性设置为(非原子,保留)吗?还是应该将其声明为其他内容?

【问题讨论】:

  • 看来我找到了问题所在。但是,我不确定为什么会有所作为!之前,我通过调用 setDate 属性设置器(定义为(非原子,保留))来设置我的日期。然后我将属性更改为(非原子,复制)并将属性分配本身更改为 [callingClass setDate:[expirationDate retain]]。我唯一的猜测是,在设置器中,内存是在属性设置器的“释放”和“分配”之间的短时间内自动释放的!如果是这样的话,那该死的,这有点吓到我了,我现在需要格外小心!
  • 没有代码这似乎无法解决。
  • 如果你有复制属性,那么调用[callingClass setDate:[expirationDate retain]]会导致内存泄漏。

标签: xcode debugging nsdate


【解决方案1】:

我想我找到了问题所在。 我有一个方法叫: - (NSDate*) getNSDateFromString:(NSString*)stringDate;

当我调用它时,我正在做 NSDate *date = [self getNSDateFromString:expirationString]; 这导致了我上面描述的行为。

然后我将其更改为以下内容以消除崩溃:

NSDate *date = [[self getNSDateFromString:expirationString] retain]; // do something with the date here... [data release];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多