gpt4 book ai didi

objective-c - self.iVar 是否需要 ARC 的强大属性?

转载 作者:太空狗 更新时间:2023-10-30 03:15:43 25 4
gpt4 key购买 nike

  1. 如果我声明一个属性为 strong,像这样:

    @property (strong, nonatomic) UIView *iVar;

    当我设置它时,我做 iVar = ... 还是 self.iVar = ... 有关系吗?似乎对于 ARC,他们做同样的事情。

  2. 如果我只声明实例变量(而不是@property),例如 BOOL selected,是否意味着它被推断为 __unsafe_unretained(因为有没有属性指定它是强的),还是我必须明确指定?

看来我在回答ARC: How to release static variable?时可能已经回答了我自己的问题, 但我对上述问题仍然有些困惑。

最佳答案

从内存管理的角度来看,使用 ivar = ...self.property = ...(注意:没有这样的东西 因为 self.ivar) 是一样的。但是,使用 ivar = ... 不会调用 setter,而 self.property = ... 会。这有 3 个重要的分支,排名不分先后:

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

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

关于objective-c - self.iVar 是否需要 ARC 的强大属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7986954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com