【问题标题】:IBOutlets strong or weak [duplicate]IBOutlets强或弱[重复]
【发布时间】:2013-05-10 01:19:24
【问题描述】:

Outlets 可以这样创建

@interface SearchViewController : UIViewController<UISearchBarDelegate> {    
    IBOutlet UIView *viewSearchBar;
    IBOutlet UIScrollView *scrollVieww;
    IBOutlet UILabel *lblName;
}

也喜欢这样

@interface SearchViewController : UIViewController<UISearchBarDelegate> {

}

@property(nonatomic, weak) IBOutlet UIScrollView *scrollVieww;
@property(nonatomic, weak) IBOutlet UIView *viewSearchBar;
@property(nonatomic, weak) IBOutlet UILabel *lblName;

@end

我知道 ARC 中的 nonatomic/atomic strong/weak,但在第一个示例中它们是什么? strongweaknonatomicatomic

请解释或链接我的一些细节。

【问题讨论】:

  • 老实说,属于视图的出口在 ARC 中被声明为强还是弱并不重要,因为视图将对元素有强引用。
  • 请记住 viewDidUnload 在 iOS6 中已被弃用并且不再被调用。因此,如果您的部署目标 >=6.0,您可以愉快地摆脱所有 viewDidUnload 代码 :)
  • @RaheelSadiq Apple 建议 IBOutlet references be weak (因此是您的第二个示例),顶级对象除外。虽然该文档专注于 NIB,但故事板也是如此。
  • @Rob 是的,我做到了,我主要维护一个手动释放/保留项目,所以我对 ARC 的某些部分有点生疏,但我确实记得,谢谢。
  • @Rob 感谢您的链接

标签: ios objective-c properties iboutlet


【解决方案1】:

一般的经验法则,任何带有IBOutlet 的东西都应该被声明为弱。

看看weak or strong for IBOutlet and other

【讨论】:

  • 感谢您链接我的答案;)
  • +1 任何东西(除了顶级对象,这是不寻常的,你有自己的IBOutlet)如果我们弱。请参阅资源编程指南中的Managing the Lifetimes of Objects
【解决方案2】:

ARC 下的变量默认为 __strong,因此:

IBOutlet UIView *viewSearchBar;

一样

IBOutlet __strong UIView *viewSearchBar;

关于在 ARC 下处理 IBOutlets 的推荐方式,请参阅: the answer to this

【讨论】:

  • 所以我们应该使用第二种方法?
  • 正如他所说,它们是相同的。没关系。我建议忽略它,仅在非常重要或出乎意料时明确指定强项。
  • 其实建议IBOutlets一般都是弱的。请参阅我添加到答案中的链接问题。
【解决方案3】:

ARC下的实例变量默认为strong。它们既不是原子的也不是非原子的,因为它们只是实例变量而不是访问器方法。原子/非原子标志与多线程有关。它们指定访问器方法是否应该是原子的。当访问器是原子的时,执行不能更改到访问器方法中间的其他线程。当它是非原子的时,没有这样的限制。

注意: IBOutlet 是什么都没有的类型定义。它只是 Interface Builder 的一个标志,没有与内存相关的功能。

【讨论】:

  • +1 顺便说一句,(我知道您已经知道这一点,但为了未来读者的利益),我希望读者不要将您的评论解释为暗示将其设为 atomic 可以确保线程安全。它没有。请参阅使用 Objective-C 编程指南中的Properties Are Atomic by Default
  • 对于那些想知道IBOutlet 的确切定义是什么的人(来自文档):用于标识属性的标识符,因此 Interface Builder 可以将 outlet 的显示和连接与 Xcode 同步。在任何声明中的类型之前立即插入此标识符。
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 2014-08-06
  • 2012-06-25
  • 2014-03-16
  • 2011-12-31
  • 2012-07-27
相关资源
最近更新 更多