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