在控制器的类扩展里面 咱们会通常定义控件
1.和stroyBoard上面关联 这时候用weak去修饰
因为当咱们从storyBoard移除时就不会再有强引用,会自己释放
2.为了进行赋值 用weak 去修饰
当咱们从一个作用域到另一个作用域时,必须要通过在类扩展里面进行一次声明属性,通过赋值,进行作用域的跳转
3.控件进行懒加载 要用strong
当控件不一定被创建的时候,如果用也是频繁的使用时
比如:
#pragma mark - 重写didSelectRow.. 这个方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
// 取消默认选中的状态
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// 选中这个cell 会产生一些别的事件,重写了 覆盖了父类的方法
if (indexPath.section==0) {
return;
}
// 根据索引值去返回对应的cell
BFSettingsCell *cell= [tableView cellForRowAtIndexPath:indexPath];
[self.view addSubview: self.textField];
[self.textField becomeFirstResponder];
self.selectCell=cell;
}
#pragma mark - 控件的懒加载
- (UIDatePicker *)datePicker{
if (_datePicker==nil) {
_datePicker=[[UIDatePicker alloc]init];
// 显示模式
_datePicker.datePickerMode=UIDatePickerModeTime;
_datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh-Hans"];
}
return _datePicker;
}
- (UITextField *)textField{
if (_textField==nil) {
_textField=[[UITextField alloc]init];
_textField.inputView=self.datePicker;
_textField.inputAccessoryView=self.tool;
}
return _textField;
}
- (UIToolbar *)tool{
if (_tool==nil) {
_tool=[[UIToolbar alloc]init];
// 这个工具条咱们一般只需要去设置高度就可以了
_tool.height=44;
UIBarButtonItem *cancle=[[UIBarButtonItem alloc]initWithTitle:@"取消" style:UIBarButtonItemStylePlain target:self action:@selector(cancleBtnClick)];
UIBarButtonItem *done=[[UIBarButtonItem alloc]initWithTitle:@"确定" style:UIBarButtonItemStylePlain target:self action:@selector(doneBtnClick)];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
_tool.items=@[cancle,flexSpace,done];
}
return _tool;
}
就是不在事件中去创建,会消耗性能,降低效率,这时候就要去用到控件懒加载,在用的时候去创建,必须要用strong 若是weak 说不通
4.系统的view 也是进行懒加载的,设置数据不要通过set方法,要在viewDidload方法中,当控制器加载完成后,不然会出现bug