2016-01-20 65 views
0

我们知道,在ARC规则,默认值是strong,所以没关系使用@property定义与ARC:强是默认值,但什么是基本类型的默认值?

@property NSString *downloadPath 

但为什么

@property (readonly) CGFloat progress 
@property (readonly) BOOL isSSL 

好吗?由于它们是基本类型,因此应使用assign。我能否理解ARC规则如下:

当属性是基本类型时,默认值为assign,当属性为对象类型时,默认值为strong

+0

您的理解是正确的。 – Avi

回答

1

clang documentation所有权推论:

如果一个对象都被定义为保留性对象所有者类型,但没有明确的所有权预选赛中,其类型隐含调整为具有__strong资格。

这样做的原因可以在same page发现:

利用强大的默认情况下是安全的,有关推断所有权的一般规则ARC一致。不幸的是,它与非ARC规则不一致,该规则声明这些属性是隐含分配的。但是,该规则在ARC中显然是站不住脚的,因为它会导致默认不安全的代码。

由于文件说,默认的所有权限定符assign,但对于可保留类型(又名对象)的默认预选赛改为strong,这帮助开发人员以书面安全的代码。

1

U是对的!另一个默认属性是atomic

0

默认值是什么?

基本类型 - 基本类型和struct类型 - 是堆栈分配的,它们的值在分配时被复制。对于这样的类型strong,weak,unsafe_unretainedcopy都没有意义 - 没有堆对象被引用和值总是被复制。

所以这些都不是默认设置。

其中留下assign(和文档同意)。所以相信你的直觉!

HTH