私はrootVC "VC1"で私のアプリケーション内にUINavigationControllerを持っています。VC1はすべてのセルの中に2imagesを持つcollectionviewを含んでいます。ユーザーがセルを選択すると、navigationcontrollerはセルから新しいvc "VC2"に画像を渡し、ナビゲーションコントローラーの上部にプッシュします。私の問題は、私はpopviewcontroller経由でVC2をダウンすると、VC2は正しく割り当てが解除されますが、メモリは同じ高レベルで維持されます(新しいvcをプッシュした後、60mbから130mbに増加します)。私は設定されたイメージを無用にしようとしていますが、イメージビューもありますが、この作品はありません。ここに私のコードの一部です:UINavigationControllerを解放した後にメモリが高いままになる
class VC1: UIViewController {
var selectedUserPollDetails : VC2?
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! AppUserCell
selectedUserPollDetails = VC2()
selectedUserPollDetails?.leftPhoto = cell.leftImageNode.image
selectedUserPollDetails?.rightPhoto = cell.rightImageNode.image
navigationController?.pushViewController(selectedUserPollDetails !, animated: true)
}
}
class VC2: UIViewController {
lazy var arrow : ArrowBack = {
let arrow = ArrowBack()
return arrow
}()
weak var leftPhoto: UIImage?
weak var rightPhoto: UIImage?
var leftPhotoImageview: UIImageView = {
let imageview = UIImageView()
imageview.contentMode = .scaleAspectFill
imageview.layer.cornerRadius = 5
imageview.layer.masksToBounds = true
return imageview
}()
var rightPhotoImageview: UIImageView = {
let imageview = UIImageView()
imageview.contentMode = .scaleAspectFit
imageview.layer.cornerRadius = 5
imageview.clipsToBounds = true
return imageview
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(leftPhotoImageview)
view.addSubview(rightPhotoImageview)
view.addSubview(arrow)
arrow.addTarget(self, action: #selector(handleArrowBack), for: .touchUpInside)
}
func handleArrowBack(){
navigationController?.popViewController(animated: true)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
leftPhotoImageview.frame = CGRect(x: 100, y: 0, width: 100, height: 100)
rightPhotoImageview.frame = CGRect(x: 100, y: 200, width: 100, height: 100)
if leftPhoto != nil, rightPhoto != nil{
leftPhotoImageview.image = leftPhoto
rightPhotoImageview.image = rightPhoto
}
}
deinit{
leftPhoto = nil
rightPhoto = nil
leftPhotoImageview.image = nil
rightPhotoImageview.image = nil
}
私も写真が割り当て解除されていることを確認するために最後にdeinitを追加しました。だから、基本的に私はVC2をもう一度押す(ポップ後)メモリの量が再び倍増(260MB)されるなど...この問題の原因は何ですか?私は間違って何をしていますか? btw。私はそれほど重要ではない機能やバールを省略しました
毎回飛び出る後に減少しているときイムキャスティングimageviewを弱くしているか、または所有していないクラッシュがあり、破損した行がviewdidloadの 'view、addSubview(leftPhotoImageview!)'内にあるので、VC2のimageviewを割り当てても画像ビューがnilでないように見える場合、しかし、initでdeinitを使わないと、どうしてそれが起こっているのか分かりませんか?または任意の手がかり?私は私がここで終わった理由をすべて試したと思う以外にも:( –