Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将远程图像加载到Tableview单元格中_Ios_Swift_Uitableview_Uikit - Fatal编程技术网

Ios 将远程图像加载到Tableview单元格中

Ios 将远程图像加载到Tableview单元格中,ios,swift,uitableview,uikit,Ios,Swift,Uitableview,Uikit,我正在将图像从服务中提取到表视图单元格中。我有图像URL,我可以在cellforrowatinexpath或在表视图单元格的layoutSubViews方法中获取图像。哪一个是获取远程数据最有效的地方 cellforrowatinexpath方法 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = self.table

我正在将图像从服务中提取到表视图单元格中。我有图像URL,我可以在
cellforrowatinexpath
或在表视图单元格的
layoutSubViews
方法中获取图像。哪一个是获取远程数据最有效的地方

cellforrowatinexpath
方法

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell =  self.tableView.dequeueReusableCell(withIdentifier: "custom") as! MovieViewCell
    cell.title =  searchResultMovies[indexPath.row].title
    cell.movieImage = searchResultMovies[indexPath.row].poster
    return cell
}
override func layoutSubviews() {
    super.layoutSubviews()
    if let title = self.title{
        titleLabel.text = title
    }
    if let movieImage = self.movieImage {
        movieImageView.loadImageFromString(imageString: movieImage)
    }
}
布局子视图
方法

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell =  self.tableView.dequeueReusableCell(withIdentifier: "custom") as! MovieViewCell
    cell.title =  searchResultMovies[indexPath.row].title
    cell.movieImage = searchResultMovies[indexPath.row].poster
    return cell
}
override func layoutSubviews() {
    super.layoutSubviews()
    if let title = self.title{
        titleLabel.text = title
    }
    if let movieImage = self.movieImage {
        movieImageView.loadImageFromString(imageString: movieImage)
    }
}

如果您注意到上面的代码,您可以看到我正在从
layoutsubviews
内部调用
loadImageFromString
,这也可以在
cellforrowatinexpath
中完成。哪一个地方更好?为什么?

这两个方法之间没有比较,但最好的做法是在自定义单元格类中创建一个config方法,并使用要设置的模型调用它,
layoutSubviews
用于需要根据视图的边界执行某些操作时,顺便说一句,还要确保
loadImageFromString
使用类似缓存的2之间没有比较,但最佳做法是在自定义单元格类内创建一个config方法,并使用要设置的模型调用它,
layoutSubviews
适用于需要根据视图边界执行某些操作时使用,顺便说一句,还要确保
loadImageFromString
使用缓存,如以下是apple文档对layoutSubviews的说明:

子类可以根据需要重写此方法以执行更精确的操作 它们的子视图的布局。仅当 子视图的自动调整大小和基于约束的行为不会 提供你想要的行为

由于加载图像与自动调整大小或调整约束无关,因此可能会误用该方法。此外,对于可见视图(例如旋转设备时),通常会多次调用LayoutSubView。您不需要多次加载图像


cellForRowAt是下载配置单元格所需图像的合适方法。

以下是apple文档对布局子视图的说明:

子类可以根据需要重写此方法以执行更精确的操作 它们的子视图的布局。仅当 子视图的自动调整大小和基于约束的行为不会 提供你想要的行为

由于加载图像与自动调整大小或调整约束无关,因此可能会误用该方法。此外,对于可见视图(例如旋转设备时),通常会多次调用LayoutSubView。您不需要多次加载图像


cellForRowAt是下载配置单元格所需图像的合适方法。

我们从何处调用自定义单元格类中的config方法?cellForRowAt?我们从哪里调用自定义单元格类中的config方法?cellForRowAt?