我正在使用以下代碼從服務器下載映像。此代碼寫在UserCell
類,這是UITableViewCell
的子類。已通過關閉捕獲自己
class UserCell: UITableViewCell {
@IBOutlet weak var profileImage: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
//calling related methods
}
/*
* Other stuffs *
*/
func refreshImage(fileURL: NSURL?) {
unowned let unownedSelf = self
DownloadManager.download(fileURL: imageURL!, completion: {(filePath) -> (Void) in
dispatch_async(dispatch_get_main_queue(), {() -> Void in
unownedSelf.profileImage.image = UIImage(contentsOfFile: filePath.path!)
})
}, error: { (error) -> (Void) in
// Handle error
})
}
}
UITableView的DataSource實現
class Friends: UIViewController {
/*
* Other stuffs *
*/
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let reusableIdentifier = "identifier"
let userObject = arrUsers[indexPath.row] //arrUsers is my array of users
let cell = tableView.dequeueReusableCellWithIdentifier(reusableIdentifier, forIndexPath: indexPath) as! UserCell
cell.refreshImage(userObject.image)
return cell
}
}
但它與_swift_abortRetainUnowned
錯誤崩潰。爲了防止我使用[weak self]
和self?.
的崩潰,但現在的問題是self
沒有被釋放。
DownloadManager.download(fileURL: imageURL!, completion: { [weak self] (filePath) -> (Void) in
dispatch_async(dispatch_get_main_queue(), {() -> Void in
// culprit statement
self?.profileImage.image = UIImage(contentsOfFile: filePath.path!)
})
}, error: { (error) -> (Void) in
// Handle error
})
如果我註釋掉的罪魁禍首聲明,然後我的記憶中消費量大約爲40兆字節,但這種說法不言而喻200MB +,並滾動它增加。
我無法理解要做什麼或錯過了什麼。任何人都可以幫助我理解和解決這個問題。
請發表您的所有代碼。 – ryantxr
@ryantxr,請參閱編輯的問題。 –
看起來你有一張桌子,每個單元格都有一個下載的圖像。 – ryantxr