iOS -- Effective Objective-C 阅读笔记 (7)
1: 实现 description 方法
NSlog 在输出自定义的类时, 只输出了 类名 和 对象的内存地址. 要想输出更为有用的信息也很简单, 只需要覆写 description 方法并将描述此对象的字符串 返回即可.
- (NSString*)description{
return xxxxxxx;
}
有个简单的办法, 可以在 description 中输出很多互不相同的信息, 那就是借助 NSDictionary 类的 description 方法.
- (NSString *)description{
return [NSString stringWithFormat:@"%@",@{@"title: _title, @"age":@(_age)"}];
}
NSObject 协议中还有一个方法 debugDescription , 此方法的用意与 description 非常相似, 二者的区别在于, debugDescription 方法是开发者在调试器中以控制台命令 打印对象时才调用的. 在 NSObject 的默认实现中, 此方法只是直接调用了 description
使用方法, 我们在创建实例所用的代码后面插入断点, 然后通过调试器, 使其暂停于此, 当程序运行到断点时, 开发者就可以向调试器控制台中输入命令了,
'po' 命令, 可以完成对象打印的 (prient-object) 工作.
同样, 你也可以覆写 debugDescription 的方法, 使其更合你意.
总结:
实现 description 方法返回一个有意义的字符串, 用以描述该实例
若想在调试时打印出更详细的对象描述, 则应实现 debugDescription 方法, 'po' 命令, 打印对象
2: 尽量使用不可变对象
设计类的时候, 应充分运用属性来封装数据. 而在使用属性时, 则可将其生命为 '只读'. 默认情况下, 属性是 '可读可写的', 这样设计出来的类都是 '可变的'. 不过, 一般情况下,我们要建模的数据未必需要改变.
具体到编程实践中,则尽量把对外公布出来的属性设为只读, 而且在只有却又必要的时候对外公布.
总结:
尽量创建不可变的对象
3: 使用清晰而协调的命名方式
尽量使用 '驼峰式大小写命名法'
方法命名 长度要适中, 表达清晰, 且言简意赅.
给方法命名时的注意事项
(1) 如果方法的返回值是新创建的, 那么方法名的首个词应是返回值的类型, 除非前面还有修饰语.属性的存取方法不遵循这种命名方式. 属性的存取方法应该按照其对应的属性来命名.
(2) 应该把表示参数类型的名词放在参数前面.
(3) 如果方法要在当前对象上执行操作. 那么就应该 包含动词, 若执行操作时还需要参数. 则应该在动词后面加上 一个 或多个名词.
(4) 不要使用 str 这样的简称, 而应该使用 String 这样的全称.
(5) Boolen 属性应加上 is 前缀, 如果某方法返回非属性的 Boolean 值, 那么应该根据其功能, 选用 has 或 is 当前缀.
(5) 将 get 这个前缀 留给那些 借由 ' 输出参数' 来保存返回值的方法.
类与协议的命名
应该为类与协议的名称加上前缀, 以避免命名空间冲突. 而且应该像给方法起名时那样吧词句组织好, 使其从左至右读起来较为通顺.
类 与 协议的命名惯例, 命名方式应该协调一致.
总结:
起名时应遵循从标准的 OC 命名规范
方法名要言简意赅, 从左至右读起来顺畅
方法名里不要使用缩略后的类型名称
为私有方法命名规范
以 'p_' 开头命名私有方法, 这样容易区分
不要但用一个下划线 '_' 做私有方法的前缀, 因为这种方法是预留给苹果公司的.
iOS -- Effective Objective-C 阅读笔记 (7)的更多相关文章
- iOS Testing with Xcode 阅读笔记
官方文档直通车 Performance Testing A baseline is a combination of the average time performance in ten runs ...
- Effective Java, 3e阅读笔记一
引言 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库,适用于任何具有实际Java工作经验的程序员. 本书一共90个条目,12章,每个条目讨论一条规则,这些规则反映了最有经验的优秀程序员 ...
- QCon 2015 阅读笔记 - 其他精选主题
QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...
- QCon 2015 阅读笔记 - 移动开发最佳实践
所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...
- SDL源码阅读笔记(1) 基本模块
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 前言 对于大牛来说,写关于阅读源码的文章都会叫源码剖析或者深入浅出啥的,对于我,自己阅读阅读源码,写 ...
- 《STL源代码剖析》---stl_deque.h阅读笔记(2)
看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
随机推荐
- [第二届构建之法论坛] 预培训文档(C++版)
本博客是第二届构建之法论坛暨软件工程培训活动预培训文档中[适用于结对编程部分的C++版本],需要实验者有一部分C++基础. 目录 Part0.背景 Part1.配置环境 Part2.克隆项目 Part ...
- ReSharper 2017破解详细方法:
VS里面,打开ReSharper的注册窗口:ReSharper ——> Help ——> License Information... Use License Server,右侧加号,点击 ...
- python 类的私有变量和私有方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...
- gprof性能测试工具
1.编译时加-pg选项,例如:gcc -pg test.c-o test_gprof.其中test后的_gprof一定要加上.会生成gmon.out. 2.运行程序.gprof test_gprof ...
- IDEA或Webstorm设置Terminal终端字体大小
File---Settings
- tqdm的使用方法
Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator),使用pip就可以安装 使用方法主要是:t ...
- Pandas系列(十一)-文件IO操作
数据分析过程中经常需要进行读写操作,Pandas实现了很多 IO 操作的API,这里简单做了一个列举. 格式类型 数据描述 Reader Writer text CSV read_ csv to_cs ...
- 1.5分布式通讯框架-RMI
分布式通信框架-RMI讲解 什么是RPC Remote procedure call protocal RPC协议其实是一个规范.常用PRC框架:Dubbo.Thrif.RMI.Webservice. ...
- openJDK之如何下载各个版本的openJDK源码
如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢? 现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢? 1.openJDK ...
- 分享一个自搭的框架,使用Spring boot+Vue+Element UI
废弃,新的:https://www.cnblogs.com/hackyo/p/10453243.html 特点:前后端分离,可遵循restful 框架:后端使用Spring boot,整合了aop.a ...