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