Effective Objecttive-C 2.0

Posted 菜鸟的点滴记录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Effective Objecttive-C 2.0相关的知识,希望对你有一定的参考价值。

  中文: 编写高质量ios与OS X代码的52个有效方法

  整体评价: 书中提出了52条建议,如果都能遵守的话,对码代码还是很有帮助的。书中记录的有些东西,现在看有点老,不过很具有参考性。如果感觉飞时间的话,直接翻看每一章最后面的【要点】总结

  我把52条,稍微整理了一下,也算是,自己的一些想法吧,就是写着玩的,参考下就完事。

  第1条:了解Object-C语言的起源  -- 简单介绍,可以忽略的

  第2条: 在类的头文件中尽量少引入其他头文件 -- .h文件中,尽量用@class,少用#import  -- 降低耦合,稍微的提供编译效率

  第3条: 多用字面量语法,少用与之等价的方法 -- 直接赋值,就好了,不要总是  [xxx alloc] init], 多用下标方式访问。(这一条估计大家都会遵守,可以忽略)

  例如:

            NSString str = @"111"     array[0] = @"111"     dict["age"] = 1

  第4条: 多用类型常量,少用#define预处理指令 -- #define定义出来相同的东西,系统不会报错。个人经历:我们在项目中,会吧宏定义在一个专门的文件中,这样方便管理

      例如:  #define KTimeout 0.3 ==> static const NStimeInterval KTimeout = 0.3;

  第5条: 多用枚举

           两种情况: true/false   两种以上: enum

  第6条: 理解 "属性" 这一概念  -- @property (nonatomic, assing/strong/weak/copy)

  第7条: 在对象内部尽量直接访问实例变量

  第8条: 理解 "对象等同性" 这一概念 -- isEqualToString / == 的区别

  第9条: 以 "类族模式" 隐藏实现细节 -- 封装方法,提供统一的对外访问接口

  第10条: 在既有类中使用关联对象存放自定义数据 -- 不理解,看官自己研究吧。哈哈哈

      例如: objc_setAssociatedObject(xxx,xxx,...)

  第11 条: 理解 objc_msgSend的作用 -- 如题

  第12条: 理解消息转发机制 -- 如题

  第13条:用 "用方法调配技术" 调试 "黑盒方法" -- runtime 的一些用法  

  第14条: 理解 "类对象" 的用意 -- isa 的简单解释

  第15条: 用前缀避免命名空间冲突 -- 在使用前缀时,尽量用三个字母以上,两个字母是苹果的预留,将来可能会有冲突

  第16条: 提供 "全能初始化方法" -- 基类,或者基础方法,所有方法都来调用它。我们可以在网络层,封装一个这样的方法,用来统一处理网络请求

  第17 条:实现description方法 -- 仁者见仁,自己在项目中貌似没有实现过这个方法, 更习惯 po model 来查看

  第18条: 尽量使用不可变对象 -- .h readOnly  .m readWrite   这样写更安全,大家可以试试看,我现在就在用这种方法

  第19条: 使用清晰而协调的命名方式 -- 好的方法明,等于注释。但是,国人的英语拼写出来的方法名,真的是。。。 个人建议: 适当注释,尤其是逻辑注释

  第20条: 为私有方法名加前缀  -- 好想法,但是总是忘记,哈哈哈,

     例如: - (void) p_privateMethod

  第21条: 理解 Object-C 错误模型  -- 错误机制,可以看看

  第22条: 理解 NSCopying 协议 -- 如题

  第23条: 通过委托与数据源协议进行对象间通信  -- 典型的像 UITableviewDelegate/Datasource,另外在自己定义的时候,可以考虑用block

  第24条: 将类的实现代码分散到便于管理的数个分类之中 -- 瘦身,拆分,网上有好多方法

    第25条: 总是为第三方类的分类名称加前缀 -- 防止冲突

  第26条: 勿在分类中声明属性 -- 如题

  第27 条:使用 "class-continuation分类" 隐藏实现细节

     例如: @interface Demo() {

        NSString *demoStr = @""

      }

            @end

  第28条: 通过协议提供匿名对象 -- 代理方式的运用

  第29条: 理解引用计数 -- ARC

  第30条: 以 ARC 简化引用技术 -- 如题

  第31条: 在 dealloc 方法中只释放引用并解除监听 -- 释放,通知,KVO,还可以测试循环引用

  第32条: 编写 "异常安全代码" 时留意内存管理问题 -- try{} catch{} finally{}

  第33条: 以弱引用避免保留环 -- 感觉翻译的不太好,其实就是解决 循环引用 问题

  第34条: 以 "自动释放池块" 降低内存峰值 -- 自己很少用 @autoreleassepoll ,理解下

    第35条: 用 "僵尸对象" 调试内存管理问题 -- 利用 xcode 自带工具检测

  第36条: 不用使用 retainCount -- 保留计数,用来查看某对象的计数器,貌似已经废除掉了

  第37 条:理解 "块" 这一概念 -- block 的各种优缺点与写法

     例如: void (^myBlock)(int a, int b)

  第38条: 为常用的块类型创建 typedef -- 方便调用

     例如: typedef int(^SuccessBlock)(BOOL flag, NSError *error)

               SuccessBlock blcok = ^ (BOOL flag, NSError * err) { // do something};

               - (void) doSomeThingWithCompletion:(SuccessBlock) completion

  第39条: 用 handler 块降低代码分散程度 -- block

  第40条: 用块引用其所属对象时不要出现保留环 -- 使用 block 时,避免循环引用  weakSelf

  第41条: 多用派发队列,少用同步锁 -- GCD

  第42条: 多用GCD,少用 performSelector 系列方法 -- 如题

  第43条: 掌握 GCD 及操作队列的使用时机 -- 如题

  第44条: 通过 Dispatch Group 机制,根据系统资源状况来执行任务 -- 可以看看,说不定哪一天突然用到了

    第45条: 使用 dispatch_once 来执行只需要运行一次的现成安全代码 -- 单例

  第46条: 不要使用 dispatch_get_current_queue -- 如题

  第47 条:熟悉系统框架 -- 忽略

  第48条: 多用块枚举,少用 for循环 -- 

  第49条: 对自定义内存管理语义的 collection 使用无缝桥接 -- Object-C 与 C 互相调用, __bridge

  第50条: 构建缓存时选用 NSCache 而非 NSDictionary -- NSCache 可以自动清除,线程安全

  第51条: 精简 initialize 与 load 的实现代码

  第52条: 别忘了 NSTimer 会保留其目标对象 -- 注意关闭计时器

 

呜呜,累死了,终于写完了,其实洗完发现也并没有什么用,就是自己写着玩而已,方便以后看的时候,通过一句话就想起来,要怎么做才好。

就先这样吧。闪啦

以上是关于Effective Objecttive-C 2.0的主要内容,如果未能解决你的问题,请参考以下文章

effective javascript 学习心得

Effective Scala

java effective 读书笔记

Effective C++ 笔记:4设计与声明

《Effective Objective-C 2.0》读书/实战笔记 三

effective STL