Ios 创建可占用大量内存的UI按钮

Ios 创建可占用大量内存的UI按钮,ios,swift,memory,Ios,Swift,Memory,我正在创建一个自定义键盘。基本原理是使用FMDB启动查询并获得字体列表(数组)。之后,我需要相应地更改ui按钮的标题。但几次之后,内存将达到自定义键盘的上限。然后键盘重新启动。我认为以下是问题的根源。如何修改它,使其在每次执行时不会占用大量内存。请帮忙 func create_font_button(){ let u = UIScreen.main.bounds.width/8 font_view.frame = CGRect(x: 0, y:0, width:mainvie

我正在创建一个自定义键盘。基本原理是使用FMDB启动查询并获得字体列表(数组)。之后,我需要相应地更改
ui按钮的标题。但几次之后,内存将达到自定义键盘的上限。然后键盘重新启动。我认为以下是问题的根源。如何修改它,使其在每次执行时不会占用大量内存。请帮忙

func create_font_button(){

    let u = UIScreen.main.bounds.width/8

    font_view.frame = CGRect(x: 0, y:0, width:mainview.bounds.size.width, height: UIScreen.main.bounds.height / 45 * 4)
    font_view.backgroundColor = UIColor.white


    self.view.addSubview(font_view)
    for index in 0...7 {
        font_btn = UIButton(type: .roundedRect)
        font_btn.tag = index
        font_btn.backgroundColor = UIColor.yellow
        font_btn.titleLabel!.font =  UIFont(name: "Helvetica-Bold", size: 30)
        font_btn.frame = CGRect(x:u * CGFloat(index), y: 0, width: u-1, height: UIScreen.main.bounds.height / 45 * 4)

        font_btn.titleLabel?.minimumScaleFactor = 0.1
        font_btn.titleLabel?.numberOfLines = 1
        font_btn.titleLabel?.adjustsFontSizeToFitWidth = true

        if index == 0{
            if font.count == 0{
                font_view.removeFromSuperview()
            }
            else{
                font_btn.backgroundColor = UIColor(red: (255/255.0), green: (204/255.0), blue: (204/255.0), alpha: 1.0)
                font_btn.setTitle(font[0], for: .normal)
                font_btn.addTarget(self, action: #selector(font_btn_tap), for: .touchUpInside)
            }
        }
        else  if index == 1{
            if font.count < 2{
                font_btn.backgroundColor = UIColor.white
                font_btn.setTitle("", for: .normal)
            }

            else{
                font_btn.backgroundColor = UIColor(red: (196/255.0), green: (240/255.0), blue: (244/255.0), alpha: 1.0)
                font_btn.setTitle(font[1], for: .normal)
                font_btn.addTarget(self, action: #selector(font_btn_tap), for: .touchUpInside)

            }
        }
        else  if index == 2{
            if font.count < 3  {
                font_btn.backgroundColor = UIColor.white
                font_btn.setTitle("", for: .normal)

            }
            else{
                font_btn.backgroundColor = UIColor(red: (255/255.0), green: (254/255.0), blue: (204/255.0), alpha: 1.0)
                font_btn.setTitle(font[2], for: .normal)
                font_btn.addTarget(self, action: #selector(font_btn_tap), for: .touchUpInside)
            }
        }
        else{
            if font.count < index + 1{

                font_btn.backgroundColor = UIColor.white
                font_btn.setTitle("", for: .normal)
            }
            else{
                font_btn.backgroundColor = UIColor(red: 248.0/255, green: 242.0/255, blue: 227.0/255, alpha: 1)
                font_btn.setTitle(font[index], for: .normal)
                font_btn.addTarget(self, action: #selector(font_btn_tap), for: .touchUpInside)
            }
        }
        font_view.addSubview(font_btn)

    }

}
func创建字体按钮(){
设u=UIScreen.main.bounds.width/8
font_view.frame=CGRect(x:0,y:0,width:mainview.bounds.size.width,height:UIScreen.main.bounds.height/45*4)
font\u view.backgroundColor=UIColor.white
self.view.addSubview(字体视图)
对于0…7中的索引{
font\u btn=ui按钮(类型:.roundedRect)
font\u btn.tag=索引
font\u btn.backgroundColor=UIColor.yellow
font\u btn.titleLabel!.font=UIFont(名称:“Helvetica Bold”,大小:30)
font_btn.frame=CGRect(x:u*CGFloat(索引),y:0,宽度:u-1,高度:UIScreen.main.bounds.height/45*4)
字体?标题标签?.minimumScaleFactor=0.1
字体标题标签?.numberOfLines=1
font\u btn.titleLabel?.adjustsFontSizeToFitWidth=true
如果索引==0{
如果font.count==0{
font\u view.removeFromSuperview()
}
否则{
font_btn.backgroundColor=UIColor(红色:(255/255.0)、绿色:(204/255.0)、蓝色:(204/255.0)、alpha:1.0)
字体\u btn.setTitle(字体[0],用于:。正常)
font_btn.addTarget(self,action:#选择器(font_btn_tap),for:.touchUpInside)
}
}
如果索引=1,则为else{
如果font.count<2{
font_btn.backgroundColor=UIColor.white
font_btn.setTitle(“,表示:。正常)
}
否则{
font_btn.backgroundColor=UIColor(红色:(196/255.0)、绿色:(240/255.0)、蓝色:(244/255.0)、alpha:1.0)
字体\u btn.setTitle(字体[1],用于:。正常)
font_btn.addTarget(self,action:#选择器(font_btn_tap),for:.touchUpInside)
}
}
如果索引=2,则为else{
如果font.count<3{
font_btn.backgroundColor=UIColor.white
font_btn.setTitle(“,表示:。正常)
}
否则{
font_btn.backgroundColor=UIColor(红色:(255/255.0)、绿色:(254/255.0)、蓝色:(204/255.0)、alpha:1.0)
字体\u btn.setTitle(字体[2],用于:。正常)
font_btn.addTarget(self,action:#选择器(font_btn_tap),for:.touchUpInside)
}
}
否则{
如果font.count
您的问题是,消耗内存的是SQLite代码。现在你建议它的按钮代码。我也不相信问题在这里(虽然在上面的代码中,您没有向我们展示您在哪里创建
font\u视图
,以及您在哪里删除先前的
font\u视图
;如果您不删除旧的,而只是添加新的,您将最终失去内存。但是我想退一步问一下,您如何准确地得出上述代码是问题的根源。我t感觉您是在猜测,而不是使用“调试内存图”或工具(请参阅)要确定泄漏的内容及其占用的内存量。但是,即使上面的代码泄漏了视图和按钮,内存消耗也没有那么大。通常它需要图像或类似的内容来消耗大量内存。感谢您的评论。由于我是编程新手,请帮我找出问题的根源。这让我很恼火很长时间了。下面请找到我的源代码供您参考。非常感谢您的帮助。