《Effective Objective-C 2.0》 读后总结
感觉自己最近提升很慢了。然后去找了一些面试题看看。发现自己自大了。在实际开发中,让我解决bug、编写功能,我有自信可以完成。但是对项目更深层的思考,我却没有。为了能进到自己的目标BAT。也为了让自己更进一步发展。目前是计划是先看《Effective Objective-C 2.0》、《Objective-C高级编程:iOS与OS X多线程和内存管理》2本书,并将AFN、YYCache、SDWebImage等开源源码再认真看一遍,并写下自己的读后总结。
《Effective Objective-C 2.0》总结出编写高质量iOS与OX X代码的52个技巧。看完后,觉得还是有很多之前没有注意到的地方,认识到自己的不足之处。这里总结就不一一列举所有的技巧,重点是介绍我觉得比较实用的点,有些比较理论的知识比如对象所占的内存总是分配在“堆空间”就不在这里介绍了,有兴趣的同学,可以去看看全本书,值得推荐。
1.在类的头文件中尽量少引用其他头文件,因为过多引入头文件会增加编译时间。在.h中最好使用向前声明"@class"方式。这样一方面可以降低类之间的耦合,另一方面可以防止2个类的互相引用。
2.尽量使用字面量语法来创建字符串、数值、数组、字典。这种方式看起来更加简明扼要,而且创建数组、字典时可以保证不会出现nil。
//字面量语法:
NSNumber *intNumber = @;
NSNumber *floatNumber = @1.2f;
int x = ;
float y = 2.32f;
NSArray *arr = @[@"one",@"two",@"three"];
//其他语法创建就是比如的alloc等。。
3.多用类型常量(static const),少用#define预处理指令。不要用预处理指令定义常量。这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作。即使有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一样。另外使用类型常量时也要注意命名,是否要加前缀之类的。
4.使用枚举来表示状态机的状态、传递给方法的选项以及状态码等值。与创建结构体相比,创建对象还需要额外开销,例如分配及释放堆内存等。在处理枚举类型的switch语句中不要实现default分支。这样的话,加入新枚举之后,编译器就会指示开发者:switch语句并处理所有枚举。
5.iOS开发中几乎所有属性都声明为nonatomic,这是因为iOS中使用同步锁开销很大,这会带来性能问题,但是这不能保证“线程安全”,所以在特定的时候要学会修改为atomic,但是大部分时候还是用nonatomic。
6.在对象内部尽量直接访问实例变量。最直白的区别是在对象内使用:self.name是属性访问。_name是直接访问。推荐_name。
《Effective Objective-C 2.0》 读后总结的更多相关文章
- 我的第一本docker书-阅读笔记
花了三四天看完了我的第一本docker书,话说书写的还是挺简单易懂的.与传统的VM,VirtualBox,或者与那种内核虚拟的xen,kvm相比,docker作为一种容器的虚拟方式,以启动进程的方式来 ...
- 《第一本docker书》—— 读后总结
关于docker 这本书其实并没有读完,只不过最近工作比较繁忙,也无心再看这些用不到的书.以后要是工作需要,再仔细学习吧. 这次的阅读算是达到目的了,对docker有了一定的了解.它的作用.意义以及大 ...
- 第一本Docker书读书笔记
日常使用命令 1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: ...
- 《第一本Docker书》
Docker简介 Docker依赖写时复制(copy-on-write),使修改应用程序非常迅速. Docker推荐单个容器只运行一个应用或进程,鼓励面向服务的架构和微服务架构. Docker的核心组 ...
- 第一本docker书 学习笔记(二)
#安装docker的先决条件 运行64位CPU构架的计算机(docker目前不支持32位的cpu) 运行LUFSinux3.8或者更高版本内核 内核必须支持一种合适的存储驱动,例如: device M ...
- 《第一本Docker书》学习笔记——第3章 Docker入门
3.1 确保Docker已经就绪 查看docker是否正常工作: sudo docker info 3.2 运行我们的第一个容器 现在,让我们尝试启动第一个Docker容器.我们可以使用docker ...
- 《第一本docker书》- 第一章笔记
环境: Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic i686) 第一章: 1 Docker客户端和服务器 2 Docker镜像 添加一个文件,执行一 ...
- 《第一本docker书》第4章 使用docker镜像和仓库 读书笔记
docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并 ...
- 第一本docker书,,持续更新中
1.查看应用是否在docker中部署成功 需要确认curl已安装 whereis curl sudo apt-get -y install curl curl localhost:8081 如果成 ...
- 第一本docker书 学习笔记(一)
Docker的核心组件: Docker客户端和服务端 Docker镜像 Registry Docker容器 # Docker客户端和服务端 docker 是一个 C/S架构程序.客户端只需要向dock ...
随机推荐
- Keil MDK下如何设置非零初始化变量(转)
源:Keil MDK下如何设置非零初始化变量 一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备.而keil mdk在默 ...
- js局部变量,参数
作者:zccst 所有函数的参数都是按值传递的.也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样.基本类型值的传递如同基本类型变量的赋值一样.而引用类型值的传递,则 ...
- 位图文件(BMP)格式以及Linux下C程序实现(转)
源:位图文件(BMP)格式以及Linux下C程序实现 说到图片,位图(Bitmap)当然是最简单的,它是Windows显示图片的基本格式,其文件扩展名为*.BMP.由于没有经过任何的压缩,故BMP图 ...
- vs2012中的小技巧2
vs代码前面出现.......,解决方法是:点击菜单编辑——高级——查看空白
- [TJOI2013]单词
2755: [TJOI2013]单词 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 6 Solved: 3[Submit][Status][Web B ...
- STM32 定时器用于外部脉冲计数(转)
源:STM32 定时器用于外部脉冲计数 STM32 定时器(一)——定时器时间的计算 STM32的定时器是灰常NB的,也是灰常让人头晕的(当然是对于白菜来说的). STM32中的定时器有很多用法: ( ...
- Oracle 事件
Oracle 的事物 事物是设么 事物是用于高正数据的一致性,他由一组相关的dml语句组成(增加删除语句),这组语句要么全部成功要不全部失败. 如:网上转账. 1)设置保存点 Savepoint a1 ...
- java系列--I/O流
java.io类 一.I/O流 1.流的概念 二. InputStream --此抽象类是表示字节输入流的所有类的超类. 1.public int read(byte[] b) throws IOEx ...
- Redis client Python usage
http://www.yiibai.com/redis/redis_sorted_sets.html mport redis r_server = redis.Redis('localhost') # ...
- iOS 沙盒
1. 概念 某个应用程序的非代码文件存放空间. 2. 文件结构 每个沙盒有三个文件夹: Documents: 存放文件 Library: 存放默认设置或状态信息.Library/caches: 缓存文 ...