关于优化
除了之前用单例模式把数据放在一个类中的优化之外,今天又总结了其他几种关于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;
}