【发布时间】:2017-04-05 23:44:18
【问题描述】:
我有一个用作新闻源的表格视图。这些单元格是从一组新闻源项中填充的。我从服务器获取 JSON,从该输入创建新闻源项目并将它们附加到我的新闻源数组。新闻提要项包含标题、描述和 imageurl 字符串。
在:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "ImageFeedItemTableViewCell1", for: indexPath) as! ImageFeedItemTableViewCell
var item = self.feed!.items[indexPath.row]
if (item.messageType == 1){
cell = tableView.dequeueReusableCell(withIdentifier: "ImageFeedItemTableViewCell1", for: indexPath) as! ImageFeedItemTableViewCell
cell.title.text = item.title
cell.description.text = item.contentText
if (item.imageURL as URL == URL(string: "noPicture")!)
{
cell.picture.image = UIImage(named:"empty")
}
else{
if (item.cachedImage == UIImage(named:"default-placeholder")){
let request = URLRequest(url: item.imageURL as URL)
cell.picture.image = item.cachedImage
cell.dataTask = self.urlSession.dataTask(with: request, completionHandler: { (data, response, error) -> Void in
OperationQueue.main.addOperation({ () -> Void in
if error == nil && data != nil {
let image = UIImage(data: data!)
if (image != nil){
self.feed!.items[indexPath.row].cachedImage = image!
}
cell.picture.image = image
}
})
})
cell.dataTask?.resume()
}else
{
cell.picture.image = item.cachedImage
}
}
}
行中的单元格被我的 newsfeeditem 数据填充。
但由于我将所有新闻提要项都保存在一个数组中,因此内存使用率很高,并且每个额外的新闻提要项都会增加。我希望它可以像 twitter 一样进行无休止的滚动,所以我想知道有经验的开发人员是如何解决这个内存问题的。
【问题讨论】:
-
请将 cellForRowAt 方法添加为代码 sn-p
-
我已经添加了缺失的代码!
-
如果提要很多,分页是一种很好的实现方式
-
我也想过这个问题。什么样的分页?页面索引号看起来已经过时了,所以我想到了 twitter,当你到达底部时它们会加载新的推文,但是你可以在不加载的情况下再次向上滚动,这意味着它们将数据保存在某个地方,我想知道将所有推文保存在内存中会我猜应用程序崩溃了。
-
普通数据可以保存在数组中。但是可以获取和设置图像等信息。 Kingfishers 和 alamofireImage 也可以帮助缓存它。\
标签: ios swift uitableview caching memory-management