ios 动态创建和复用结构

2018-10-22  本文已影响9人  wangyongyue

在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来到高。

上一篇下一篇

猜你喜欢

热点阅读