Effective objective-c 2.0阅读笔记

这本书非常的好,看完后,感触挺深,总结纪录一下,针对ios开发的备忘:

注:分类和原著有些不同,自己总结学习用的,仅供参考。

  • 系统篇:
  1. 了解oc起源:继承c,由Smalltalk演化而来。动态语言,运行期决。需要熟悉c语言。

6.  理解变量属性 a.原子性 b.读写 c.内存管理语义 d.方法名 。尽量少用atomic .注意使用copy属性避免数据安全问题。 还有oc动态语言特性,硬编码问题。类内部不要直接访问变量。

7.  还是重复了上一篇:在对象内部尽量直接访问实例变量。a.快,没有派发。b.避免copy复制属性。c.不会触发kvo。d.排错问题有点扯了。

8.  对象等同问题。 isEqual机制原理。hash方法判断对象是否等同的逻辑。

10.runtime机制的associatedObject.(关联对象),一般不用。

11.理解objec_msgSend机制(消息传递机制)。还是动态语言特性。a.oc对象每个方法都可以视为简单的c函数。使用了尾递归优化了栈,避免过早栈溢出。

12.理解消息转发机制,经常有:unrecognized selector sent to instance xxx的log。关键词:动态方法解析,系统框架自带的缓存方法机制原理。

13.方法调配,黑盒子调试。看到这一篇的时候,我只是觉得作者有点丧心病狂,走火入魔了。

14.理解“类对象”用意。a.对象isa指针的定义。b.判断对象类型方法,不用isEqual,可能有消息转发触发。

21.理解错误类型。a.正确使用NSError。

22.理解NSCopying协议。a.自定义对象实现copy功能。b.浅拷贝和深拷贝。

23.通过委托和数据源协议进行对象间通信。a.使用观察者模式,要考虑weak属性(非持有)。b.可以实现含有位段的结构体存储信息。

26.勿在分类中声明属性。category中不能添加变量的问题。可以用associate来解决。(runtime机制)尽量避免这种需求,代码会比较乱,作者说:经常有不可预知的bug。

37.理解“块”这一概念。a.“堆栈块”的概念怀疑作者自己象形取的,就是注意块的引用范围问题,避免其被提前释放了。使用copy属性后,会复制到堆中。b.块也就是闭包语法。

38.为常用的块类型创建typedef。

47.熟悉系统框架(cocoa框架),Foundation框架,CFNetwork,CoreAudio,AVFoundation,CoreData,CoreText,TextKit,UIKit,QuartzCore(图形)等。同样是说了c的重要性。

  • 编码习惯篇:

2.  在类的头文件尽量少引入其他头文件,原因:a.减少编译时间。b.避免相互引用的问题(import使用了一些预处理进行优化了)。使用@class来解耦(向前声明),实现class-continuation来实现细节隐藏(包括delegate, 或者独立申明一个文件,再引入,当然,还是可以轻易的被人down出来头文件的)

3.  使用自带的糖语法(字面量语法)。这里只说一下注意点:

4.  多用类型常量,’少用’#define. a.类型问题 不可以避免修改。还是要根据代码需求进行处理。例如: a.#define UNLog(xx, ...) NSLog(@“”) b.书中很多地方提到的命名问题

15.用前缀避免命名空间冲突。还是命名问题,作者再次强调了。

18.尽量使用不可变对象。a.尽量创建readonly对象,可以在class-cotinuation中修改成readwrite。b.主要问题是容易造成数据安全的问题。

19.使用侵袭而协调的命名方式。还是命名问题。

20.为私有方法名家前缀。还是命名问题,估摸着,作者应该是被命名不好的同学这么惨了。

25.总是为第三方的分类名称加前缀。还是命名,这一点,做过sdk的同学应该感触很深。

27.使用“class-continuation分类”隐藏实现细节。看到这标题,有种作者在凑字数的错觉。

  • 代码逻辑优化篇:

5.  使用枚举,选项,状态代码. 注意一下枚举是会自增1的。(DRY)

9.  使用抽象工厂模式,创建类族。

16.提供“全能初始化方法”。a.文档说明 b.注意子类父类的继承覆写问题。

17.实现description方法。这里让我想到了另一个问题:如何将自定义的object存到NSUserDefault。也是一样的解决思路的。

24.将嘞的实现代码分散到便于管理的数个分类之中。

28.通过协议提供匿名对象。使用匿名对象来隐藏类型名称l。

39.用handler块降低代码分散程度条的应用。

40.用块引用其所属对象时不要出现保留环。

41.多用派发队列,少用同步锁。

42.多用GCD,少用performSelector系列方法。

43.掌握GCD及操作队列的使用时机。

44.通过Dispatch Group机制,根据系统资源状况来执行任务。

45.使用dispatch_once来执行只需要运行一次的线程安全代码。a.注意一下滥用单例的问题。

46.不要使用dispatch_get_current_queue。a.应该做调试用。*慎用。

48.多用枚举,少用for循环。

49.对自定义其内存管理语义的collection使用无缝桥接。

50.构建缓存时选用NSCache而非NSDictionary。a.自动释放资源。“线程安全”。可以控制内存。b.注意缓存,加快响应速度。

51.精简initialize与load的实现代码。提高响应速度,避免“依赖环”的几率。

52.别忘了NSTimer会保留其目标对象。ps:ALL

  • 内存管理篇:

29.理解引用计数。理解基本的对象引用计数,资源释放回收,weak引用问题,循环应用,锁的问题。(又是混字数的)

30.以ARC简化引用计数。a.__unsafe_unretained与weak的区别。b.__weak关键字。c.常见的释放资源问题。例如非oc对象的释放问题。

31.在dealloc方法中只释放引用并解除监听。a.delloc方法中,注意一些KVO.NSNotification的解除问题。b.文件流的引用关闭问题。c.delloc代码段表明已经在回收了。

32.编写“异常安全代码”时留意内存管理问题。try代码中会有泄漏问题。其实都发生了catch了,泄漏了已经不重要了。那个辅助功能也是鸡肋,没机会用的赶脚。

33.以弱引用避免保留环。看到这个标题,感觉作者又来混字数的。读完感觉也是这样。DRY。

34.以“自动释放池块”降低内存峰值。a.使用@autoreleasepool (貌似也没有用上的机会的赶脚)

35.用“僵尸对象”调试内存管理问题。a.常见的僵尸模式调试以及全局异常断点。b.僵尸模式的实现原理。通过修改isa指针,避免释放等一系列操作,终止程序。

36.不要使用retainCount。a.ARC下已经废弃。

读后感:本书讲的东西,有一些地方不免重复。很多东西其实都在平时阅读的源码中体现了。以至于让我错以为:“本来就是这样的”。

感谢作者写出这样的书来分享自己的经验,非常感谢。

时间: 2024-08-11 01:23:08

Effective objective-c 2.0阅读笔记的相关文章

skynet1.0阅读笔记_skynet的启动

首先看skynet的启动,函数入口在 skynet_main.c 的main(),其中最重要的是: skynet_start(&config); 在skynet_start中做了两个启动: //启动了snlau服务,然后加载launch服务 bootstrap(ctx, config->bootstrap); //创建monitor,timer,socket,worker线程等 start(config->thread); 下面我们逐步跟进函数 static void bootstra

Effective Objective-C 2.0重读笔记---1

上次看这本书的时候匆匆走了一遍,最近不太忙,重温了一遍,把笔记写出来~.. 有兴趣的可以去买一本,感觉这本书还是挺不错的 由于大部分是在坐车的时候用手机写的,所以代码很少,图也很少 1. 尽量使用向前声明,延后引入头文件的时间,这样可以减少编译时间2. 使用arraywithobjects:....如果遇到为空的变量,就会自动终止,后面的变量便会添加不上,切不会报错,会造成数据不一致问题,所以尽量使用字面量语法创建相关对象,减少出错且减少代码量3. 使用字面量创建的对象都是不可变的,如果要获得可

编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记

编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记 这本书年初刷完,感觉不错,介绍了很多小点,都是平日不怎么关注的. 第1章 熟悉Objective-C 这章没什么好介绍 第1条:了解Objective-C语言的起源 第2条:在类的头文件中尽量少引入其他头文件 第3条:多用字面量语法,少用与之等价的方法 第4条:多用类型常量,少用#define预处理指令 要理解为啥要少用#define预处理指令. 然后具体用哪个, 自己定吧 第5条:用枚举表示状态.选项.状态

刚刚汉化了一个app——NoteBox V1.0汉化版---随机阅读笔记的app

NoteBox V1.0汉化版---随机阅读笔记的app大小:950KB软件性质:免费无广告 软件简介:NoteBox 可以创建和编辑笔记.NoteBox 可以随机的展示你的笔记给你阅读.NoteBox 功能作用:-保存心里鸡汤给自己加油打气-保存笔记随机阅读,提高你的记忆力-当你犯选择困难症的时候可以把你需要选择的东西记录下来,随机选择-选择你将要吃什么饭喝什么饮料啦-决定应该看什么电影听什么歌曲啦...和其他任何你所想到的事情都可以随机!如果在使用中遇到错误.有建议.或其他任何东西想法随时与

Effective C++ 阅读笔记_条款27 尽量少做转型动作

Effective C++ 阅读笔记_条款27 尽量少做转型动作 1.转型的三种形式,可以分为两大类. (1)旧式转型(old-style casts) (1.1) (T) expresstion (1.2) T (expression) (2) 新式转型(c++-style casts) (2.1)const_cast<T> (expression) (2.2)dynamic_cast<T> (expression) (2.3)reinterpret_cast<T>

蓝牙4.0核心文档阅读笔记

一.蓝牙技术介绍 蓝牙无线通讯包括两种模式:基础模式(BR, Basic Rate)和低功耗模式(LE, Low Energy). 蓝牙系统包括一个Host和多个Controllers,Host包括在HCI(Host Controller Interface)与应用程序之间,Controller指HCI以下的层.典型的BLE(Bluetooth Low Energy)协议栈结构如下图所示. 二.低功耗蓝牙4.0(BLE)概述 BLE具有两种多路通信方式:频分多址(FDMA,Frequency d

Hadoop 2.2.0 Job源代码阅读笔记

本文所有涉及的内容均为2.2.0版本中呈现. 概述: Job在创建Job并且提交的人的眼中,可以在创建的时候通过配置Job的内容,控制Job的执行,以及查询Job的运行状态.一旦Job提交以后,将不能对其进行配置,否则将会出现IllegalStateException异常. 正常情况下用户通过Job类来创建.描述.提交Job,以及监控Job的处理过程.下面是一个简单的例子: // Create a new Job Job job = new Job(new Configuration()); j

Effective Objective-C 2.0重读笔记---2

1. 很多时候我们需要保证读写数据的安全性,这时候最好不要使用@synchronized同步块,因为同步块中的代码必须单独执行,这有可能会使当前的代码等许多无关的代码执行完毕才能继续执行,降低程序运行效率.此外还有NSLock ,NSRecursiveLock这些锁,但是这些锁也应该少用, 最好的办法就是用GCD队列保证数据的安全性,而且GCD基于XUN内核,提供了很多底层优化 dispatch_queue_t serialQ = dispatch_queue_create("testGCDQu

《STL源代码剖析》---stl_deque.h阅读笔记(2)

看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation f