iOS Viewcontroller 引用 TableView IBOutlet - 弱还是强?

标签 ios objective-c memory

正如我在另一个问题中读到的,经验法则是:

当父对象有子对象的引用时,应该使用强引用。当子对象引用其父对象时,您应该使用弱引用或 unsafe_unretained 引用(如果前者不可用)。一个典型的场景是当你与委托(delegate)打交道时。例如,UITableViewDelegate 不保留包含 TableView 的 Controller 类。

好吧,在这种情况下,我有一个带有 TableView IBOutlet 的 View Controller 。此 TableView 还使用 View Controller 作为委托(delegate)和数据源。根据上面的规则, View Controller 充当父级,因此我应该对 TableView 有一个强引用—— TableView 应该对 View Controller 有一个弱引用。

我不确定如何定义后一个弱引用 - 我正在设置

tableView.delegate = self;
tableView.dataSource = self;

我该如何让自己变弱?或者这不是正确的方法吗?

最佳答案

您只需将 socket 从 UITableView 拖到您的 .h 文件中。 Xcode 将为您创建适当的属性。在命名 Outlet 时,您也可以从那里选择弱/强类型。

如果您想手动创建它,您可以将此行添加到您的 .h 文件中:

@property (weak, nonatomic) IBOutlet UITableView *tblView;

但是请记住,即使在将此行添加到您的 .h. 文件之后,您仍然需要将它连接到您的 UITableView

另外不要忘记让您的 ViewController 符合 UITableViewDelegate ,如下所示:

@interface MyTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

但是,在您的标题中,您似乎对弱属性和强属性之间的区别感到困惑。 Ole Begemann已在 This question 上出色地回答了差异.

关于iOS Viewcontroller 引用 TableView IBOutlet - 弱还是强?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35176546/

相关文章:

ios - 我如何修复 safari 6 网络检查器,使其与 iOS 设备或模拟器一起工作?

c++ - Objective-C 如何使用 vector 对?

c++ - 有没有办法查看每个线程进程的虚拟内存使用情况?

python - 切割杆问题集的递归树

ios - swift 如何从 firebase 数据库进行搜索

ios - 使用 RAC 动态选择要观察的属性

ios - 为什么必须先初始化NSObject的.class-property才能对其进行初始化

iphone - 禁用导航项后退栏按钮

C#内存开销从何而来

ios - 运行旧的 iOS 版本 XCode