深恶痛绝重写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];}
}
转载于:https://www.cnblogs.com/tangjuanj/p/8325052.html
深恶痛绝重写setter和getter相关推荐
- java类的对象无参与有参_java无参与有参以及setter和getter方法(了解)
第一题:分析以下需求,并用代码实现 手机类Phone 属性: 品牌brand 价格price 行为: 打电话call() 发短信sendMessage() 玩游戏playGame() 要求: 1.按照 ...
- 【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
文章目录 一.Java 类成员及 setter 和 getter 方法设置 二.Groovy 类自动生成成员的 getter 和 setter 方法 一.Java 类成员及 setter 和 gett ...
- 玩转Eclipse — 自动生成setter和getter方法
我们在程序开发过程中,往往要编写这样的类:类的部分或者全部属性不希望让外部世界直接访问,而不用public字段修饰.这样,方法调用成了访问这些属性的唯一途径.JavaBean就是一个很好的例子,其严格 ...
- Objective-C setter和getter
今天主要学习的setter和getter的使用方法, 按照昨天所学习的内容,首先我们要创建一个工程,另外在创建一个Person类! ================================== ...
- 使用Java :: Geci生成setter和getter
在本文中 ,我们创建了非常简单的hello-world生成器,以介绍框架以及通常如何生成生成器. 在本文中,我们将研究访问器生成器,它是在Java :: Geci的核心模块中定义的,它是商业级的,而不 ...
- 计算属性的setter和getter
computed的属性不仅可以写一个get方法,通过其他的值算出一个新值:同时,也可以设置set方法,通过设置一个值,来改变他相关联的值!而改变了相关联的值之后,又会引起fullName的重新计算,页 ...
- Python | 在属性的帮助下实现setter和getter
In this program, we are implementing Properties. Python offers a better way to implement setters and ...
- java setter与getter方法
//下面代码实现设置和获取学生姓名和成绩.2 class lesson5homework 3 {4 public static void main(String[] args) 5 {6 TestCo ...
- 初识 Vue(10)---(计算属性的 setter 和 getter)
计算属性的 setter 和 getter 方法一: <!DOCTYPE html> <html lang="en"> <head><me ...
- java中封装类Feild和使用setter和getter方法访问封装的类Feild
class Person {private String name;private int age;public void setName(String name) //定义访问name的方法{if ...
最新文章
- Django 3.2.5博客开发教程:使用富文本编辑器添加数据
- python flask项目过程_Python 开发过程遇到的问题
- 《知易行难》扩展练习
- 最优化学习笔记(四)共轭梯度法
- FreeRTOS+STM32F103中断中发送任务通知单片机死机问题
- ImportError: Can‘t find framework /System/Library/Frameworks/OpenGL.framework.ImportError:Error occu
- 春季高考计算机专业专业分值,春季高考总分多少 分值分布情况如何
- little定理的证明,网络的时延模型,little定理的例子
- PMP资料,考过的学员整理分享
- 峨眉山徒步休闲三日游攻略内附详细时间
- dell计算机运行慢怎么解决方法,戴尔笔记本电脑运行速度慢怎么办?
- 超级表格终于上线「文件转让」功能!文件调动容易解决!
- unity学习之动画状态切换后角色沉入地面里面
- GitHub 热点速览 Vol.16:化身蒙娜丽莎和乔布斯对话
- 模拟幂律分布(附C语言代码)
- Android系统固件定制方式
- C# 后台发送Post Get请求 Json数据或表单数据
- 电脑内存条C14和C16的区别是什么?
- C语言 求一元二次方程ax2+bx+c=0的根
- 加工中心逆变器散热风扇故障_西门子840D车床加工中心231885故障S120维修
热门文章
- java微信分享朋友圈_Java实现微信公众平台朋友圈分享功能详细代码
- Bmob后端云的使用
- 《黑白团团队》第九次团队作业:Beta冲刺第三天
- 盛年不重来、一日难再晨
- html网页制作期末大作业成品_新疆旅游网页设计作品_dreamweaver作业静态HTML网页设计模板_新疆旅游景点网页作业制作...
- Perfmon - Windows 自带系统监测工具
- Ugly Windows UVA - 1419
- Unity UGUI 图文混排
- python爬取京东商品评价信息
- Net Core对接支付宝SDK