"具有'弱'属性的属性必须是对象类型"真正意味着什么?

pat*_*ick 7 objective-c ios

我在我的界面中有这个:

@property (nonatomic, weak) NSTimeInterval *timeStamp;
Run Code Online (Sandbox Code Playgroud)

其中我的逻辑告诉我,我需要一个时间戳对象,只有将是由此类实例化它的上下文中使用,所以"弱"似乎是合乎逻辑的我 - 但XCode的告诉我:"产权与'弱'属性必须是对象类型"...如果我只是这样做:

@property (nonatomic) NSTimeInterval *timeStamp;
Run Code Online (Sandbox Code Playgroud)

然后错误就消失了,但我不确定我明白为什么......

nil*_*nil 12

问题是它NSTimeInterval是一个值类型 - 它double本质上是一个别名(检查NSDate.h的typedef).该weak属性仅适用于具有保留计数的对象(即,来自NSObject或的任何内容NSProxy).

因此,存储指针NSTimeInterval可能是您的错误.你很可能永远不会收到指向一个指针,NSTimeInterval除非你期望写一个给定的地址作为函数的输出(在这种情况下可能是一个回调).也就是说,我不知道任何函数NSTimeInterval *作为返回类型,也没有任何函数将它传递给回调.

  • @patrick:`@property(nonatomic)NSTimeInterval timeStamp;`.`*`使它成为一个指针,你几乎肯定不需要它. (2认同)
  • 任何有效的`CFTypeRef`也可以(截至最近的SDK)与`weak`,`strong`,`retain`和`copy`关键字一起使用. (2认同)