【问题标题】:Where is better to keep the instance of data source object of Table View?Table View的数据源对象的实例保存在哪里比较好?
【发布时间】:2015-11-23 04:59:50
【问题描述】:

我想要一个符合 UITableViewDataSource 协议并与数据对象一起工作的单独类。 在哪里保存、分配和初始化这个类的实例更好? 如果我在连接到 Storyboard 的 Table View Controller 子类的 ViewDidLoad 方法中执行此操作,则在方法 ViewDidLoad 完成后释放数据源实例。

- (void)viewDidLoad
{
    [super viewDidLoad];
    MyTableViewDataSource* myDataSource = [[MyTableViewDataSource alloc] init];
    self.tableView.dataSource = myDataSource;
} // self.tableView.dataSource is deallocated

在连接到故事板的 Table View Controller 子类中创建数据源对象的强属性并在 ViewDidLoad 中分配和初始化数据源实例会更好吗?

@interface MyTableVC : UITableViewController
@property  (strong, nonatomic)  MyTableViewDataSource *myDataSource;
@end

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.myDataSource = [[MyTableViewDataSource alloc] init];
    self.tableView.dataSource = myDataSource;
}

【问题讨论】:

    标签: ios objective-c iphone uitableview


    【解决方案1】:

    它被释放的原因是UITableView 没有保留它:

    @property(nonatomic, assign) id< UITableViewDataSource > dataSource
                         ^^^^^^
    

    这对于委托是正常的,以避免保留循环。

    因此,如果您想创建一个新对象作为数据源,则需要根据您的第二个代码 sn-p 保留它。

    【讨论】:

    • 如果我使用您建议的代码 - '@property(nonatomic, assign) id dataSource',应用程序将崩溃。我与 ARC 合作。
    • 我向您展示了 UITableView 上的 dataSource 属性的声明,而不是建议更改代码。
    • 对不起!我不明白。
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多