【发布时间】:2012-06-25 12:04:39
【问题描述】:
我已将我的项目切换到 ARC,但我不明白是否必须为 IBOutlets 使用 strong 或 weak。 Xcode 这样做:在界面生成器中,例如,如果创建一个 UILabel 并且我将它与助理编辑器连接到我的 ViewController,它会创建这个:
@property (nonatomic, strong) UILabel *aLabel;
它使用strong,而不是我在 RayWenderlich 网站上阅读的教程是这样说的:
但是对于这两个特定的属性,我还有其他计划。代替
strong,我们将它们声明为weak。
@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (nonatomic, weak) IBOutlet UISearchBar *searchBar;
Weak是所有 outlet 属性的推荐关系。 这些视图对象已经是视图控制器视图的一部分 层次结构,不需要在其他地方保留。最大的优势 宣布您的网点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?当使用 strong、weak 和 unsafe_unretain 与 ARC 时,任何人都可以通过一个小教程帮助我解释清楚吗?
【问题讨论】:
标签: ios ios5 automatic-ref-counting weak-references strong-references