首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对于具有圆弧的强属性,self.iVar是必需的吗?

对于具有圆弧的强属性,self.iVar是必需的吗?
EN

Stack Overflow用户
提问于 2011-11-03 04:32:33
回答 1查看 2.2K关注 0票数 18
  1. 如果我声明了一个强属性,如下所示:

@property (强,非原子) UIView *iVar;

当我设置它的时候,我做iVar = ...还是self.iVar = ...有关系吗?

  • 如果我只声明实例变量(而不是@属性),例如BOOL selected,这是否意味着它被推断为__unsafe_unretained (因为没有属性将其指定为强),还是必须显式指定它?

在回答ARC: How to release static variable?时,我似乎已经回答了我自己的问题,但我仍然对上面的问题感到有点困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-03 04:44:53

从内存管理的角度来看,使用ivar = ...self.property = ... (注意:没有self.ivar这回事)是相同的。但是,使用ivar = ...并不会调用设置器,而使用self.property = ...则可以。这有3个重要的分支,没有特定的顺序:

  1. 如果该属性未标记为nonatomic,则对基础ivar的访问将不会获得锁,并且您将破坏原子性。如果该属性被您或子类覆盖,则不会调用被覆盖的setter。将不会发送
  2. KVO通知。

至于只声明ivar,它具有与声明局部变量相同的内存管理语义。这是在section 4.4 of the Objective-C Automatic Reference Counting文档中记录的,但基本上,如果它是一个对象,它将被推断为__strong

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7986954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档