根据ARC, 如果我定义了一个伊娃这样的:根据ARC,财产和Objective-C的声明混淆
@interface ObjectA : NSObject {
id A;
}
@property(nonatomic,unsafe_unretained) id A;
什么是财产?强或不安全?
根据ARC, 如果我定义了一个伊娃这样的:根据ARC,财产和Objective-C的声明混淆
@interface ObjectA : NSObject {
id A;
}
@property(nonatomic,unsafe_unretained) id A;
什么是财产?强或不安全?
这取决于您如何实现它。有两种方法可以去这样做:
@synthesize A;
或@synthesize A = __A;
在这种情况下,它__unsafe_unretained
,因为财产的所有权规格胜过伊娃的所有权规范。A
和setA
。在这种情况下,结果将取决于您为实现选择的备份变量的种类。这里是一个link于阐述了如何属性的所有权被确定的规则的文档。参见第4.1.1节。
如果相关联的实例变量已经存在,那么它的所有权资格必须等于资产的所有权;否则,该实例变量是通过该[所有权]的所有权限定来创建的。
属性的指定所有权被保留在其元数据中,否则其含义是纯常规的,除非属性被合成。
我很感兴趣...你有文档链接吗? – 2012-07-12 03:44:06
Msing - >使用? – 2012-07-12 03:45:23
@luyuan是的,谢谢你的纠正。 – dasblinkenlight 2012-07-12 03:52:26
从苹果DOC:
可变预选赛
您使用以下一生预选赛变量,就像你,说,常量。
__strong
__weak
__unsafe_unretained
__autoreleasing
__strong
是默认值。只要有一个强有力的指针,一个对象就保持“活着”。 __weak
指定了一个引用,该引用不保留被引用对象的活动状态。当没有强引用时,弱引用设置为零。 __unsafe_unretained
指定一个引用,该引用不会使引用的对象保持活动状态,并且在没有对该对象的强引用时不会将其设置为nil。如果它所引用的对象被解除分配,指针就会悬空。 __autoreleasing
用于表示通过引用(id *)传递的参数,并在返回时自动释放。 你应该正确地修饰变量。在对象变量声明中使用限定符时,正确的格式为:
你刚刚设置了“unsafe_unretained” – 2012-07-12 03:35:03
我很少使用gtalk。如果你有QQ,你可以添加50602724. – 2012-07-12 05:08:17