Effective ObjectiveC 2.0 Note

1、The memory for objects is always allocated in heap space and never on the stack。

2、对于[NSArray arrayWithObjects:obj1,obj2,obj3,nil]。当使用方法时,如果obj2为空,则只有obj1被插入。录使用Literals时,@[objc3,obj2,obj3],如果objc2为空,会抛出异常。dictionary同理。

3、Literals语法创建的容器均为不可变类型,如果要创建可变类型,需要加mutableCopy。如:

  [@[@1,@1] mutableCopy]

4、Objc has no namespace。

5、使用有类型的const Type定义来替换define宏。

6、使用NS_ENUM、NS_OPTIONS来定义枚举变量:

7、在类内部,使用accessor还是直接访问属性。若读则直接访问,若写则使用accessor。直接访问的好处是速度快;直接访问的问题是会让property的copy、atomic语意失效,以及让KVO失效。另外,使用property有助于调试,你可以在accessor中添加断点来查看谁修改了变量。

8、在方法:init/dealloc 中,赋值的时候直接访问variable,因为如果子类实现了同样的property,则会调用子类的方法,而改变父类的初始语义。

9、==比较的是指针本身的值,想要比较两个对象的内容是否相待,需要实现isEqual方法。isEqual默认比较两个指针是否一致。isEqual相等的两个对象,其中hash返回值必相等;但hash值相等的对象,其isEqual未必相等。hash返回值被用于容器索引。
 
10、因为NSArray是一个Class Cluster,所以以下代码是错误的:
  
  正确的方法应该像如下这样:
  
11、指定的构造函数(designated initializer)可以有多个,指定的构造函数必须调用父类的指定构造函数。非指定构造函数最终会调用到指定构造函数。有一种建议是子类必须覆盖继承链上所有的指定构造函数,但个人认为此法可取也不可取。
12、用NSLog输出时,description提供文本。在debugger中用po输出时,debugDescription提供文本。
13、对于readonly属性,如果希望对外只读,对内可读写,则在extention中设置为readwrite,而在.h中设置为readonly。
14、苹果框架的前缀均以2个大写英文字母打头,所以自定义类的前缀最好是3个大写字母,为了与苹果框架前缀以区分开,避免冲突。
   苹果框架的私有方法以一个下划线打头,所以自定义类的私有方法最好避免以一个下划线打头,避免冲突。
15、异常最好只用抛弃fetal-error。对于其它普通错误,可以通过返回BOOL值,以及NSError来反馈错误。
16、 NSCopying协议用于普通的copy,NSMutableCopying用于变化的copy。
17、view只负责如何显式,不负责获取哪些数据显式,获取数据应该由controller来做。
18、delegate有2种作用,一种是delegate提供数据,一种是为delegate提供通知。
19、如果一个protocol只在类内部使用,则应声明在extension里。
20、破解retain cycle的方法有2种,一是使用weak引用,另一个是强制破解其中一条引用从而使环被破除。
21、不同的方法名,ARC对返回值的处理不同:
    
  对于newPerson,ARC直接返回;对于somePerson,ARC返回[person autorelease]。
22、不要使用retainCount:
  1)考虑到autorelease,retainCount可能非常大,以及不好预测。
  2)retainCount最小值是1,永远不会为0。
  3)taggedPtr的retainCount无意义。
23、@synchrosized()的坏处是所有类的访问共用一把锁。有时使用NSLock能提供更好的锁访问控制功能。
24、performSelector系列函数在ARC下不安全,ARC无法判定此函数的返回值对象该如何处理,从而有可能导致leaks。使用block来代替。
25、GCD有一些没有的功能,需要由其它框架来提供:
  1)GCD没有提供取消任务的功能。但NSOperationQueue提供了取消任务的功能。
  2)GCD没有提供任务依赖功能,barrier提供了一种较弱的可行的方法。但NSOperation提供了设置依赖的渠道。
26、遍历有4种:
  1)for (int i =0; i < array.count; i++)
  2) for (Item* item in array)
  3) NSEnumerator
  4) [array enumerateWithBlock]
27、NSCache用于存储key-value,但其提供当内存不足的时候(收到内存警告)自动释放掉一些元素。
28、在Load方法中使用其它类不安全,因为此时其它类对象可能还没被加载进内存。
29、在initialize方法中可以安全地使用其它类的方法。
30、NSTimer会retain对象,易引用双向引用而导致的Leak。

Effective ObjectiveC 2.0 Note的更多相关文章

  1. Effective Objective-C 2.0之Note.01

    1.在类的头文件中尽量少引入其他头文件 除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件.这样做可以尽量降低类之间的耦合(co ...

  2. Effective Objective-C 2.0 学习记录

    由于最近入职,公司安排自由学习,于是有时间将Effective Objective-C 2.0一书学习了一遍.由于个人知识面较窄,对于书中有些内容无法理解透彻,现将所学所理解内容做一遍梳理,将个人认为 ...

  3. Effective Objective-C 2.0 Reading Notes

    1. Literal Syntax NSString *someString = @"Effective Objective-C 2.0"; NSNumber *someNumbe ...

  4. 《Effective Objective-C 2.0》 读后总结

    感觉自己最近提升很慢了.然后去找了一些面试题看看.发现自己自大了.在实际开发中,让我解决bug.编写功能,我有自信可以完成.但是对项目更深层的思考,我却没有.为了能进到自己的目标BAT.也为了让自己更 ...

  5. 《Effective Objective-C 2.0》摘要

    前一段时间将<Effective Objective-C 2.0>这本书浏览了一遍,说一下几个觉得比较有意思的知识点. 感觉这本书是ios开发必看的一本书,最基础的,以及稍微高阶一点的oc ...

  6. Effective Objective-C 2.0

    Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法 作者:Matt Galloway(英) 译者:爱飞翔 出版社:机械工业出版社 出版年:2014-01 ...

  7. Effective Objective-C 2.0之Note.04

    “类族”(class cluster)是一种很有用的模式(pattern),可以隐藏“抽象基类”(abstract base class)背后的实现细节.Objective-C的系统框架中普遍使用此模 ...

  8. Effective Objective-C 2.0之Note.03(属性详解)

    用Objective-C等面向对象语言编程时,“对象”(object)就是“基本构造单元”(building block),开发者可以通过对象来存储并传递数据.在对象之间传递数据并执行任务的过程就叫做 ...

  9. Effective Objective-C 2.0之Note.02

    1.多用类型常量,少用#define预处理指令 不要用预处理指令定义常量.这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作.即使有人重新定义了常量值,编译器也不会产生警告信息 ...

随机推荐

  1. 【PL/SQL编程】注释说明

    1. 单行注释 由两个连接字符“--”开始,后面紧跟着注释内容. 2. 多行注释 由/*开头, 由*/结尾.

  2. Unity3d command line arguments

    Options Many of these relate to Unity3d command line arguments Batch Mode - should be left enabled u ...

  3. Go语言使用匿名结构体解析JSON数据

    手机拥有屏幕.电池.指纹识别等信息,将这些信息填充为 JSON 格式的数据.如果需要选择性地分离 JSON 中的数据则较为麻烦.Go 语言中的匿名结构体可以方便地完成这个操作. 首先给出完整的代码,然 ...

  4. (二)canvas边框问题

    lineWidth 设置边框的大小 fillStyle 设置div的颜色 strokeStyle 设置边框的颜色 注: 边框在不设置的情况下默认为1px 黑色,但是x,y轴的距离是以图形的正中心为原始 ...

  5. [转载] ffmpeg 基本数据结构和对象: AVPacket、AVPicture、AVFrame

    一.AVPacket /** * AVPacket 作为解码器的输入 或 编码器的输出. * 当作为解码器的输入时,它由demuxer生成,然后传递给解码器 * 当作为编码器的输出时,由编码器生成,然 ...

  6. TCP, Scoket, HTTP(转)

    1.TCP连接 要想明白Socket连接,先要明白TCP连接.手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上 ...

  7. C# chart控件运用

    为了弄一个实时数据显示的窗口,最近一周时间都耗在这个控件上了,属性有点多(下面列的是一些常用的) 后来干脆写代码把他们封装起来,各个chart直接来调用它,省得到属性里面去设置. chart内的一些元 ...

  8. 洛谷 P1227 [JSOI2008]完美的对称

    传送门 题目大意:求一些点集的公共对称中心 题解:对称中心是可以确定的,再判断. 代码: #include<iostream> #include<cstdio> #includ ...

  9. ①SpringBoot入门教学篇

    一.什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  10. Oracle Stream配置详细步骤

    1 引言 Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication.Oracle Stream利用高级队列技 ...