【发布时间】:2016-11-02 10:05:30
【问题描述】:
在两个 Uiviewcontroller 之间发送 UIImage 是否合适?
我正在做 CS193P Spring - Smashtag 的作业 4。
在那里我必须实现提及表视图(这是推文的一种附加数据:提及、主题标签、图像、网址)。我必须将图像放置到那里的适当单元格。为此,我已经下载了它。之后,如果用户点击其中一个图像,它应该转到另一个 UIViewController,用户可以在其中缩放和滚动图像。
在我见过的许多示例中,人们发送图像的 url 并一次又一次地获取它(提到控制器和另一个相同的图像)。我认为它会降低性能。所以我在控制器之间发送 UIImage 对象。
但它是正确的吗?
// MARK: - Navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == Storyboard.SearchSegue {
if let svc = segue.destinationViewController as? SearchResultsTableViewController {
if let cell = sender as? TextTableViewCell {
if let text = cell.hashtagLabel.text {
if text.hasPrefix("@") || text.hasPrefix("#") {
svc.searchText = text
}
}
}
} else if let svc = segue.destinationViewController as? ImageViewController {
if let cell = sender as? ImagesTableViewCell {
svc.image =
}
}
}
}
svc.image 是 var:
var image: UIImage? {
get {
return imageView.image
}
set {
imageView.image = newValue
imageView.sizeToFit()
scrollView?.contentSize = imageView.frame.size
}
}
和 cell.imageVar
var imageVar: UIImage? {
get {
return imageField.image
}
set {
imageField.image = newValue
spinner.stopAnimating()
}
}
获取函数
private func fetchImage () {
if let u = url {
spinner?.startAnimating()
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
let contentsOfURL = NSData(contentsOfURL: u)
dispatch_async(dispatch_get_main_queue()) {
if u == self.url {
if let imageData = contentsOfURL {
self.imageVar = UIImage(data: imageData)
} else {
self.spinner.stopAnimating()
}
}
}
}
}
}
【问题讨论】:
-
请写代码,我可以给你建议。
-
如果您不想在下载图像时将保存图像传递到文档目录中,并在需要时使用文档目录路径并在不需要时从目录中删除。
-
我认为如果您使用缓存系统来防止网络使用并加快加载速度,您可以发送图像 url。如果将图像(或图像)保存在内存中,则需要考虑内存管理/泄漏。
标签: ios swift design-patterns model-view-controller computer-science