类型和生命周期限定符之间的区别

时间:2011-10-31 03:46:07

标签: objective-c automatic-ref-counting

使用Objective-C或其他适用的语言?

我想我真正要问的是,__weakconst在分类方面是一样的吗?在谈论__weakconst等时,我可以互换术语类型和生命周期限定符吗?

2 个答案:

答案 0 :(得分:5)

在C中,类型限定符将质量(属性,属性)附加到给定类型。有三种类型限定符:const(只读,无写入),volatile(无缓存)和restrict(无别名)。

自动引用计数(针对Objective-C)添加了四个新类型限定符:__autoreleasing__strong__unsafe_unretained__weak。由于ARC的性质 - 即自动化内存管理 - 这四种类型限定符附加了与所有权相关的属性。

  

我想我真正要问的是,__weakconst在分类方面是否相同?

它们都是类型限定符,但只有__weak是所有权限定符。

  

在谈论__weakconst等时,我可以互换术语类型和生命周期限定符吗?

不,他们不可互换。上面列出的所有限定符都是类型限定符,但只有ARC引入的四个限定符是所有权限定符。

请注意,the LLVM project使用面额所有权限定符,而Apple似乎使用终身限定符

答案 1 :(得分:0)

const指定对象在其生命周期内无法更改。

__ weak意味着对象引用不会增加引用计数,当您使用ARC时,这对于您不拥有或不想增加引用计数的对象(例如循环引用计数)非常有用。 strong将是默认值并暗示引用计数更改。