我正在自己的背景中开展大量的应用程序。我创建了一个自定义UI,在一般意义上像Zillow一样。它有一个主视图控制器,它是空的,但处理应用程序中所有视图控制器之间的转换,除了一些小视图控制器,至少几层深的视图控制器。我确保所有控制器的所有干扰总是在我不久前完成它的时候被称为。它有一个leftViewController,一个rightViewController,一个中间的地图,以及当左右视图控制器为零时右侧的迷你地图。我使用
实例化控制器//step 1
class func mainStoryboard() -> UIStoryboard {
return UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
}
class func viewController() -> UINavigationController? {
return mainStoryboard().instantiateViewControllerWithIdentifier("viewController") as? UINavigationController
}
}
//step2
viewController = {
let nav = UIStoryboard.viewController()!
let child = nav.childViewControllers.first! as! ViewController
//do work normal done in prepareForSegue
return nav
}()
whichSideWillPanelSpawn = .right //(or .left)
addChildSidePanelController(viewController)
//step3
private func addChildSidePanelController(controller: UIViewController, whichSideWillPanelSpawn: WhichSideWillPanelSpawnEnum) {
controller.view.frame = CGRectMake(0, 0, totalWidth - rectWidth, view.bounds.height)
switch orientation {
case .left:
controller.view.frame.origin.x = 0
view.insertSubview(controller.view, atIndex: 0)
case .right:
controller.view.frame.origin.x = totalWidth
view.insertSubview(controller.view, aboveSubview: someController)
}
addChildViewController(controller)
controller.didMoveToParentViewController(self)
UIView.animateWithDuration(0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0, options: .CurveEaseInOut, animations: {
controller!.view.frame.origin.x = someValueForPostitioning
}, completion: completion)
}
我试图基本上得到我在那里做的事情,但我删除了大量的代码。我对功能没有任何问题,所以不用担心看起来它应该不起作用。我的问题是,在这方面实例化视图而不是使用导航堆栈时,我是否可以在内存泄漏中寻找特定的东西?
示例1: 当我打开特定的视图控制器时,我会失去记忆而永远不会回来。到目前为止,我通过尝试在所有闭包中添加[unowned self]或[weak self]来减少我工作中的内存使用量。我即将开始努力确保我不会像Int(thisInt)那样不必要地投射变量(thisInt as Int)。尽管如此,即使在视频控制器出现后,我也会失去这种记忆。如果不再有指向视图控制器的指针,那么内存在哪里?当我从之前返回时它没有增加数量,但增加不会减少除了deinit之后的最小量。我有一个理论认为这部分与核心数据有关,因为我的核心数据变量的范围增加,即使数量应该是最小的,我想,也许更多的内容被带入内存而不是我意识到。虽然如果是这种情况,我认为增加的值会随着我在数据中存储的大小的大小而变化(我存储位置对象,存储大量数据,具体取决于他们填写的每个位置信息)他们。),但根据我的行为,增长的幅度似乎相当稳定。
示例2: 如果我垃圾邮件点击屏幕上的一个点,它将在基本视图之间来回移动,没有右视图控制器或左视图控制器以及第一个左视图控制器产生,我可以看到内存使用量增长,即使我看到视图控制器每次来回走动都要去除。点击这样的垃圾邮件将导致它永远不会达到峰值,而如果我慢慢点击它会达到峰值。我只有一个指向左视图控制器的指针,它处理可以在左侧生成的所有视图控制器。然后我在右边有一个处理右边的所有这些。当我点击垃圾邮件时,为什么内存会继续增长,而不是在我正常来回点击时?我有安全措施,以防止从开始到完成前一过渡的任何过渡。
我已经阅读了几篇关于内存使用情况的文章,并且对我现在所处的位置感到困惑。我是否应该找到一种方法来在我的2个viewcontroller指针上使用导航堆栈?为什么垃圾邮件点击让内存在我的剩余使用时间内保持不变?我可以使用哪些其他方法来发现我没有提到的泄漏?对于iPad App,不间断的内存使用量是多少?在viewController中取消了剩下的残留物来清理以减少内存使用量?我知道我要求很多,但我每天都在接近释放,这已成为一个临时的事情。我一直在一步一步地建立一个企业应用程序。感谢您的时间和提前回复!!!