您的位置:首页 > 其它

深恶痛绝重写setter和getter

2018-01-21 18:53 239 查看

一、写在前面:重写setter和getter的缺点:

1. 没有必要

2. 代码可读性大大降低

3. 容易造成逻辑混乱,引起意想不到的问题

二、没有必要

例子1: 使用重写get方法的方式初始化数据

- (NSMutableArray *)dataArray {
if (_dataArray == nil) {
_dataArray = [NSMutableArray array];
}
return _dataArray;
}


  

对于现在的处理器,这样做没有任何意义,并且需要写更多的代码,占更多的行数,这些在阅读代码时会造成一定程度的不便。

二、代码可读性大大降低

例子2:使用重写get方法的方式初始化视图

- (UITableView *)tableView {
if (_tableView == nil) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain];
}
return _tableView;
}


例2 中只是初始化了一个非常简单的视图,可能需要初始化的是一个较为复杂的视图,这时就会有人说这个是懒加载的。

我非常同意对于复杂视图懒加载的必要性。

但懒加载并不是只有重写get方法一种方式,而重写get方法会使得代码可读性大大降低。这是最令我抓狂的事情了。

开发中,如果我们需要看别人的代码,很多时候我们并不是逐行地看的,而是靠搜索,搜索这个属性在哪里被用到了,搜索这个方法在哪里被调用了。

但如果使用重写get方法的方式,一搜索“.tableView”,可能会有一长溜的结果,如果更不幸,在init或者viewDidLoad等方法中没有使用到“.tableView”的话,你要花不定长的时间来搞明白到底哪次调用时初始化了。

有人可能会说,那你就在所有的地方都打上断点,然后运行一次,看哪里先调用,就是在哪里初始化的。

但是这大大降低了你看代码的速度,有更优的方式,为什么要采取这种方式。

降低可读性的问题,可能写代码的人感受不到,但读代码的人却是深有体会。

四、容易造成逻辑混乱,引起意想不到的问题

代码可读性降低,必然会引起逻辑混乱,虽然两者不是因果关系,但却是如影随形。

五、重写getter和setter的代替方案

- (void)createTableView {
if (self.tableView == nil) {
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: