我想有一个单独的类,该类符合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

在Storyboard的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;
}

最佳答案

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

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

对于代表来说,这是正常现象,以避免保留周期。

因此,如果您想创建一个新的对象作为数据源,则需要按照第二个代码片段的方式保留它。

关于ios - 在哪里最好保留Table View的数据源对象的实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32272624/

10-10 21:05
查看更多