【发布时间】:2010-09-23 09:22:47
【问题描述】:
- 我有一个间隔为 1.5 秒(渲染周期)的通用计时器。
- 我有一个具有 NSDate* 成员/属性(非原子,保留)的类。
- 我通过调用 [callingClass setDate:expirationDate] 设置此日期;
现在......这个 NSDate 的几个渲染周期是有效的。然而,在第 3 个周期左右,这个变量的值似乎被破坏了。
当我设置断点时,我注意到我可以将鼠标悬停并看到正确显示的数据(当它有效时)。但是当它无效时,我要么看到“超出范围”,要么看到一些奇怪的字符串(看起来有点像库文件名或其他东西),或者在极少数情况下调试器不会向我显示任何变量的值(我讨厌在 xcode 中调试)。
所以这就是为什么我认为这个变量以某种方式被破坏了。 我应该将此合成属性设置为(非原子,保留)吗?还是应该将其声明为其他内容?
【问题讨论】:
-
看来我找到了问题所在。但是,我不确定为什么会有所作为!之前,我通过调用 setDate 属性设置器(定义为(非原子,保留))来设置我的日期。然后我将属性更改为(非原子,复制)并将属性分配本身更改为 [callingClass setDate:[expirationDate retain]]。我唯一的猜测是,在设置器中,内存是在属性设置器的“释放”和“分配”之间的短时间内自动释放的!如果是这样的话,那该死的,这有点吓到我了,我现在需要格外小心!
-
没有代码这似乎无法解决。
-
如果你有复制属性,那么调用
[callingClass setDate:[expirationDate retain]]会导致内存泄漏。