zoukankan      html  css  js  c++  java
  • 深恶痛绝重写setter和getter

    一、写在前面:重写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];
        }
    }
  • 相关阅读:
    浅谈 LCA
    树剖毒瘤题整理
    树链剖分&咕咕咕了好久好久的qtree3
    洛谷P4095新背包问题
    洛谷P4127同类分布
    洛谷P4124 手机号码
    数位dp好题整理+自己wa过的细节记录
    P4999烦(gui)人(chu)的数学作业
    洛谷P4317 花(fa)神的数论题(数位dp解法)
    网络流之最短路径覆盖问题
  • 原文地址:https://www.cnblogs.com/tangjuanj/p/8325052.html
Copyright © 2011-2022 走看看