我已将我的项目转换为ARC,但我不明白我是否必须在IBOutlets中使用strong
或weak
。Xcode会这样做:在界面构建器中,如果我创建一个UILabel
,并将其与助理编辑器连接到我的ViewController
,它会创建以下内容:
@property (nonatomic, strong) UILabel *aLabel;
它使用了strong
,但我在RayWenderlich网站上读到一篇教程,它说:
但是对于这两个特定属性,我有其他计划。我们将它们声明为
weak
,而不是strong
。
@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (nonatomic, weak) IBOutlet UISearchBar *searchBar;
弱引用
是所有outlet属性的推荐关系。这些视图对象已经是视图控制器视图层次结构的一部分,不需要在其他地方保留。声明你的outlets为weak
的最大优点是它节省了编写viewDidUnload方法的时间。目前我们的
viewDidUnload
看起来像这样:
- (void)viewDidUnload
{
[super viewDidUnload];
self.tableView = nil;
self.searchBar = nil;
soundEffect = nil;
}
现在你可以将其简化为以下内容:
- (void)viewDidUnload
{
[super viewDidUnload];
soundEffect = nil;
}
使用weak
而非strong
,并且在videDidUnload
中删除对nil的赋值操作。Xcode会使用strong
,应该在viewDidUnload
中使用self... = nil
。
我的问题是:我何时需要使用strong
,何时需要使用weak
?我想在iOS 4上部署,那么何时需要使用unsafe_unretain
?有人能够用简单的教程详细解释一下何时使用ARC中的strong
,weak
和unsafe_unretain
吗?
weak
可以让您节省手动编写代码(在您的情况下为两行)的时间。但是,Xcode会为您完成它。我的个人意见。我喜欢使用strong
。 - Lorenzo B