Освободить память из TabBar Навигация по представлению вкладки к другой вкладке Swift - PullRequest
0 голосов
/ 20 февраля 2019

Я использую tabbarcontroller в качестве начального контроллера просмотра.Я заметил, что когда я меняю вкладку (нажмите на другую вкладку), память, которая у нее остается, и новая память представления добавляют ее к старой.

Я пытался уменьшить ее (память вкаждая вкладка), изменив все мои переменные на ленивый, и это работало для каждого вида отдельно, и теперь у меня не очень высокий, так как мне приходилось воздействовать на энергию раздела.Но проблема с представлениями все еще остается (я получаю предупреждение о памяти после небольшой навигации по представлениям).

И приложение также разбилось и выдает ошибку:

прекращено из-за проблемы с памятьюswift

У меня есть 5 вкладок:

First with tableView

Second with collectionView and tableview

Third with a Camera

fourth with a tableView

And The last one 4 tableView

Из своего поиска я понял, что мне нужно что-то сделать с viewDidDisappear или Unload

Tabbar ScreenShot:

tabbar Screen shot

Создание пользовательского UITabbarController перехода от storyBoard к пользовательскому элементу управления навигацией:

Screen Shot

Пользовательский переход от истории к первой вкладке UITabbarController(Домашняя страница):

Screen Shot

Это мой пользовательский UITabbar Класс контроллера:

import UIKit

var tabBarItemCount = Int()

class CustomTabBarControl: UITabBarController, UITabBarControllerDelegate 
{

@IBOutlet weak var tabBarItems: UITabBar!

override func viewDidLoad() {
    super.viewDidLoad()
    UIApplication.shared.statusBarStyle = .lightContent
    self.delegate = self
    statusBarStyleCheck = true
    if let items = self.tabBarItems.items {
        for i in 0..<items.count {
            items[i].tag = i
        }
    }
}


override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    if item.tag == 4{
        boolTabProfile = true
        UserStore.shared.userIdToViewProfile = UserStore.shared.userId
      }
    }
 }

Это мой пользовательский UINavigation Класс контроллера:

 import UIKit

 let NavigationTitleFont = "Nunito-Light"

 class CustomNavigationControl: UINavigationController {

 override func viewDidLoad() {
    super.viewDidLoad()
    let textAttributes = [NSAttributedString.Key.font: UIFont(name: "Nunito-Light", size: 16)!,NSAttributedString.Key.foregroundColor:#colorLiteral(red: 0.7007879615, green: 0.6955401301, blue: 0.7298486829, alpha: 1)] as [NSAttributedString.Key : Any]
    navigationBar.titleTextAttributes = textAttributes
}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
self.setNeedsStatusBarAppearanceUpdate()
}


//Set navigation bar
var isNavigationbarHidden: Bool {
    get {
        return self.isNavigationbarHidden
    }
    set {
        isNavigationBarHidden = newValue
    }
}

//Navigation BarColor
var barColor: UIColor {
    get {
        return navigationBar.barTintColor!
    }
    set {
        navigationBar.barTintColor = newValue
    }
}

//Navigation Title Color
var navigationTitleColor: UIColor {
    get {
        return #colorLiteral(red: 0.7007879615, green: 0.6955401301, blue: 0.7298486829, alpha: 1)
    }
    set {
        navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Nunito-Light", size: 16)!,NSAttributedString.Key.foregroundColor:newValue] as [NSAttributedString.Key : Any]
    }
}

//Hide backButton
var hidebackButton: Bool {
    get {
        return navigationItem.hidesBackButton
    }
    set {
        navigationItem.hidesBackButton = newValue
    }
}

//NavigationBarImage
var navigationBarImage: UIImage? {
    get {
        return nil
    }
    set {
        self.navigationBar.setBackgroundImage(newValue, for: UIBarMetrics.default)
        self.navigationBar.shadowImage = UIImage()
    }
}

//Left Navigation image
var leftNavigationCustomItem: UIImage? {
    get {
        return nil
    }
    set {
        self.navigationItem.hidesBackButton = true
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: newValue, style: .plain, target: self, action: #selector(self.leftNavigationItemAction(_:)))
    }
}

@objc func leftNavigationItemAction(_ sender: UIBarButtonItem) -> Void {
    _ = popOrDismissViewController(true)
   }
}

И все 5 вкладок связаны через пользовательский класс навигации.

Может кто-нибудь объяснить мне, как решить эту проблему.

Любая помощь будет бОчень признателен.

Заранее спасибо.

...