美文网首页
ios 动态创建和复用结构

ios 动态创建和复用结构

作者: wangyongyue | 来源:发表于2018-10-22 18:01 被阅读9次

    在iOS开发中,UI对象的创建我一值坚持的动态创建对象。
    顶部菜单为例
    根据数据完成UI对象的创建,动态完成和修改。
    保持对象的数量最少,减少init,保证效率。
    对于可变菜单栏呢?
    每次传入的对象集合,对已生成的对象删除(置nil),然后再次创建新的UI对象。
    菜单对应的内容就要从新加载,当然可以缓存和记录,但是都是非常的麻烦和易出错的。在小型工程下其实是感觉不到的。

    相对某些持续创建对象的操作,建议使用对象缓存池,类似tableview 复用。
    下面举几个常用的例子:(不对之处,还请指教)
    1.顶部菜单的动态创建,如何更改

    var list = ["推荐","问答","关注","体育"]
    menu = Menu.create(arr:list)
    menu.delegate = self
    self.view.addChildView(menu)
    
    list.remove("体育")
    menu.removeFromSuperview()
    menu = Menu.create(arr:list)
    
    func menuSeletor(index:Int){
            
    }
    //优化之后 
    class menuModel : NSObject {
          var title:String?
          var data:Any?
           var hidden:bool = false
    }
    var list = [m1,m2,m3,m4] //menuModel数据集合
    menu = Menu.createM(arr:list)
    menu.delegate = self
    self.view.addChildView(menu)
    
    m4.hidden = true  //隐藏显示,保证一直持有,不被释放
    
    func menuSeletor(index:Int){
          var model = list[index]
            if (model.data == nil){
                 dataM.load() //操作类 网络加载数据 如果没有之前加载数据
             }
    }
    
    

    2.直播时 跳动的小心心心

    //点击就会增加❤️,不断init,完成动画后消失(置nil)
    func tap(){
       var xin = Xin()
        self.addChildView(xin)
        animation.addView(xin)
    }
    
    //优化
    
    var list = []
    
    func tap(){
      if(list.lenth = 0){
    
        animation.addView(list.first)
    
       }esle{
    
       var xin = Xin()
        self.addChildView(xin)
        animation.addView(xin)
    
      }
    
    }
    
    
    
    

    总结:对象过多确实不好,但是只是在一定范围内。如果对象个可确定可以一次性创建出来,然后复用。往复创建init对象消耗回会比hidden来到高。

    相关文章

      网友评论

          本文标题:ios 动态创建和复用结构

          本文链接:https://www.haomeiwen.com/subject/bwmgzftx.html