一、写在前面:重写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];}
}

转载于:https://www.cnblogs.com/tangjuanj/p/8325052.html

深恶痛绝重写setter和getter相关推荐

  1. java类的对象无参与有参_java无参与有参以及setter和getter方法(了解)

    第一题:分析以下需求,并用代码实现 手机类Phone 属性: 品牌brand 价格price 行为: 打电话call() 发短信sendMessage() 玩游戏playGame() 要求: 1.按照 ...

  2. 【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )

    文章目录 一.Java 类成员及 setter 和 getter 方法设置 二.Groovy 类自动生成成员的 getter 和 setter 方法 一.Java 类成员及 setter 和 gett ...

  3. 玩转Eclipse — 自动生成setter和getter方法

    我们在程序开发过程中,往往要编写这样的类:类的部分或者全部属性不希望让外部世界直接访问,而不用public字段修饰.这样,方法调用成了访问这些属性的唯一途径.JavaBean就是一个很好的例子,其严格 ...

  4. Objective-C setter和getter

    今天主要学习的setter和getter的使用方法, 按照昨天所学习的内容,首先我们要创建一个工程,另外在创建一个Person类! ================================== ...

  5. 使用Java :: Geci生成setter和getter

    在本文中 ,我们创建了非常简单的hello-world生成器,以介绍框架以及通常如何生成生成器. 在本文中,我们将研究访问器生成器,它是在Java :: Geci的核心模块中定义的,它是商业级的,而不 ...

  6. 计算属性的setter和getter

    computed的属性不仅可以写一个get方法,通过其他的值算出一个新值:同时,也可以设置set方法,通过设置一个值,来改变他相关联的值!而改变了相关联的值之后,又会引起fullName的重新计算,页 ...

  7. Python | 在属性的帮助下实现setter和getter

    In this program, we are implementing Properties. Python offers a better way to implement setters and ...

  8. java setter与getter方法

    //下面代码实现设置和获取学生姓名和成绩.2 class lesson5homework 3 {4 public static void main(String[] args) 5 {6 TestCo ...

  9. 初识 Vue(10)---(计算属性的 setter 和 getter)

    计算属性的 setter 和 getter 方法一: <!DOCTYPE html> <html lang="en"> <head><me ...

  10. java中封装类Feild和使用setter和getter方法访问封装的类Feild

    class Person {private String name;private int age;public void setName(String name) //定义访问name的方法{if ...

最新文章

  1. Django 3.2.5博客开发教程:使用富文本编辑器添加数据
  2. python flask项目过程_Python 开发过程遇到的问题
  3. 《知易行难》扩展练习
  4. 最优化学习笔记(四)共轭梯度法
  5. FreeRTOS+STM32F103中断中发送任务通知单片机死机问题
  6. ImportError: Can‘t find framework /System/Library/Frameworks/OpenGL.framework.ImportError:Error occu
  7. 春季高考计算机专业专业分值,春季高考总分多少 分值分布情况如何
  8. little定理的证明,网络的时延模型,little定理的例子
  9. PMP资料,考过的学员整理分享
  10. 峨眉山徒步休闲三日游攻略内附详细时间
  11. dell计算机运行慢怎么解决方法,戴尔笔记本电脑运行速度慢怎么办?
  12. 超级表格终于上线「文件转让」功能!文件调动容易解决!
  13. unity学习之动画状态切换后角色沉入地面里面
  14. GitHub 热点速览 Vol.16:化身蒙娜丽莎和乔布斯对话
  15. 模拟幂律分布(附C语言代码)
  16. Android系统固件定制方式
  17. C# 后台发送Post Get请求 Json数据或表单数据
  18. 电脑内存条C14和C16的区别是什么?
  19. C语言 求一元二次方程ax2+bx+c=0的根
  20. 加工中心逆变器散热风扇故障_西门子840D车床加工中心231885故障S120维修

热门文章

  1. java微信分享朋友圈_Java实现微信公众平台朋友圈分享功能详细代码
  2. Bmob后端云的使用
  3. 《黑白团团队》第九次团队作业:Beta冲刺第三天
  4. 盛年不重来、一日难再晨
  5. html网页制作期末大作业成品_新疆旅游网页设计作品_dreamweaver作业静态HTML网页设计模板_新疆旅游景点网页作业制作...
  6. Perfmon - Windows 自带系统监测工具
  7. Ugly Windows UVA - 1419
  8. Unity UGUI 图文混排
  9. python爬取京东商品评价信息
  10. Net Core对接支付宝SDK