@property定义与ARC:强是默认值,但什么是基本类型的默认值?
问题描述:
我们知道,在ARC规则,默认值是strong
,所以没关系使用@property定义与ARC:强是默认值,但什么是基本类型的默认值?
@property NSString *downloadPath
但为什么
@property (readonly) CGFloat progress
@property (readonly) BOOL isSSL
好吗?由于它们是基本类型,因此应使用assign
。我能否理解ARC规则如下:
当属性是基本类型时,默认值为assign
,当属性为对象类型时,默认值为strong
?
答
从clang documentation所有权推论:
如果一个对象都被定义为保留性对象所有者类型,但没有明确的所有权预选赛中,其类型隐含调整为具有__strong资格。
这样做的原因可以在same page发现:
利用强大的默认情况下是安全的,有关推断所有权的一般规则ARC一致。不幸的是,它与非ARC规则不一致,该规则声明这些属性是隐含分配的。但是,该规则在ARC中显然是站不住脚的,因为它会导致默认不安全的代码。
由于文件说,默认的所有权限定符assign
,但对于可保留类型(又名对象)的默认预选赛改为strong
,这帮助开发人员以书面安全的代码。
答
U是对的!另一个默认属性是atomic
。
答
默认值是什么?
基本类型 - 基本类型和struct
类型 - 是堆栈分配的,它们的值在分配时被复制。对于这样的类型strong
,weak
,unsafe_unretained
和copy
都没有意义 - 没有堆对象被引用和值总是被复制。
所以这些都不是默认设置。
其中留下assign
(和文档同意)。所以相信你的直觉!
HTH
您的理解是正确的。 – Avi