【发布时间】:2018-09-25 22:46:30
【问题描述】:
我有一个视图控制器(我们称之为 TableViewController)。当用户点击自定义 UITableViewCell 中的按钮时,一个新的视图控制器(我们称之为 DetailViewcontroller)正在打开。当用户点击 DetailViewController 内的返回按钮时,我调用了关闭函数,并且 TableViewController 再次打开。
我的问题是,当我执行 50 次这种情况时,内存使用率会更高。所以我猜它不会做任何释放。
我如何打开 DetailViewController;
@objc func voteBtnTapped(_ sender: UIButton){
guard let team = FirebaseManager.instance.currentTeam else { return }
FirebaseManager.instance.delegate = nil
let voteController = VoteViewController()
voteController.currentTeam = team
let transition = CATransition()
transition.duration = 0.5
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromRight
transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut)
view.window!.layer.add(transition, forKey: kCATransition)
self.present(voteController, animated: false, completion: nil)
}
我如何关闭 DetailViewController;
@objc func backBtnTapped(_ sender: UIButton){
FirebaseManager.instance.delegate = nil
let transition = CATransition()
transition.duration = 0.5
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromLeft
transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut)
view.window!.layer.add(transition, forKey: kCATransition)
self.dismiss(animated: false, completion: nil)
}
它说仪器有泄漏,但我不知道是什么原因导致这些韭菜。
编辑:我发现我正在使用的选择器库(在 DetailViewController 中)阻止了释放。你知道它为什么会阻止它,我该如何处理它?
从回复回答我如何声明pickerView:
let config = AZAPickerConfiguration<PickerItem>(items: (1...10).map { PickerItem(number: $0) },
defaultSelectedIndex: 4,
selectedFont: UIFont(name: "SourceSansPro-SemiBold", size: 50)!, nonSelectedFont:UIFont(name: "SourceSansPro-Light", size: 20)!, selectionRadiusInPercent: 0.5,
selectionBackgroundColor: UIColor(red:0.00, green:0.42, blue:0.20, alpha:1.0), itemWidth: 80)
self.pickerView = AZAPicker<PickerItem>(with: config, frame: .zero)
pickerView!.backgroundColor = .white
pickerView!.translatesAutoresizingMaskIntoConstraints = false
//self.pickerView!.onPickItem = self.picker
self.pickerView!.onPickItem = {( sender : AZAPicker<PickerItem>,item:PickerItem) in
print("didPickItem: \(item)")
self.currentPoint = item.number
}
【问题讨论】:
-
请使用
Instruments和分配工具,告诉我们是什么分配了这个内存 -
我添加了。你能检查一下吗? @Lu_
-
你在tableview中重复使用单元格吗?这都是一个字符串分配,你需要在代码中找到这个分配了这么多次
-
你能显示 CellForRowAtIndexPath 代码吗?
-
我添加了@Pandey_Laxman
标签: ios swift memory uiviewcontroller