关于优化
除了之前用单例模式把数据放在一个类中的优化之外,今天又总结了其他几种关于tableView的一些优化
1.label等控件
当label的公共样式属性很多的时候,我们有需要建很多label的时候,我们可以创建一个categary 把公共属性部分放在方法中 把不同的属性作为参数传进去
2.cell内容显示
cell显示内容的时候,之前我们是对cell中的每个控件依次赋值,如果这个自定义cell中有几十个控件的话,我们需要写几十行代码,显然这太繁琐了
优化前:
cell.
iconImageViwe
.
image
= [
UIImage
imageNamed
:stu.
icon
];
cell. nameLabel . text = stu. name ;
cell. sexLable . text = stu. sex ;
cell. phoneNumberLable . text = stu. phoneNumber ;
cell. introduceLable . text = stu. introduce ;
cell. nameLabel . text = stu. name ;
cell. sexLable . text = stu. sex ;
cell. phoneNumberLable . text = stu. phoneNumber ;
cell. introduceLable . text = stu. introduce ;
优化后:
cell.
student
= stu;
name、sex、phoneNumber等这些都是学生对象的属性,所以我们可以把这个学生直接传给cell,
cell拿到这个学生对象以后,再把这个学生对象的各个属性赋给自己的子控件。
cell要能直接拿到这个学生对象,就需要有一个student的属性可供外界访问和赋值。然后我们需要重写这个属性的setter方法。
-(
void
)setStudent:(
Student
*)student
{
if ( _student != student) {
[ _student release ];
_student = [student retain ];
}
// 拿到这个对象以后把对象的属性赋给cell的各个子控件,那么子控件上显示相应的值
self . iconImageViwe . image = [ UIImage imageNamed :student. icon ];
self . nameLabel . text = student. name ;
self . phoneNumberLable . text = student. phoneNumber ;
self . sexLable . text = student. sex ;
self . introduceLable . text = student. introduce ;
}
{
if ( _student != student) {
[ _student release ];
_student = [student retain ];
}
// 拿到这个对象以后把对象的属性赋给cell的各个子控件,那么子控件上显示相应的值
self . iconImageViwe . image = [ UIImage imageNamed :student. icon ];
self . nameLabel . text = student. name ;
self . phoneNumberLable . text = student. phoneNumber ;
self . sexLable . text = student. sex ;
self . introduceLable . text = student. introduce ;
}
3.把自定义cell中的视图设为懒加载对象(该视图需要被使用的时候才会被创建)
该对象只有在被取值,即被调用它的getter方法时,对象才会被创建,所以其初始化是在getter方法中实现的,所以我们
需要改写每个属性的getter方法,先判断该对象是否为空,若为空,则创建。例如:
-(
UILabel
*)nameLabel
{
if ( _nameLabel == nil ) {
_nameLabel = [[ UILabel alloc ] initWithFrame : CGRectMake ( CGRectGetMaxX ( _iconImageViwe . frame ) + kMargin , _iconImageViwe . frame . origin . y , 150 , 30 )];
_nameLabel . backgroundColor = [ UIColor cyanColor ];
[ self addSubview : _nameLabel ];
}
return _nameLabel ;
}
{
if ( _nameLabel == nil ) {
_nameLabel = [[ UILabel alloc ] initWithFrame : CGRectMake ( CGRectGetMaxX ( _iconImageViwe . frame ) + kMargin , _iconImageViwe . frame . origin . y , 150 , 30 )];
_nameLabel . backgroundColor = [ UIColor cyanColor ];
[ self addSubview : _nameLabel ];
}
return _nameLabel ;
}