非常基础的一本书,给初学者看的,比较厚,有500页,虽然是基于 iOS 7 的,但也不过时。

虽然是基础的东西,但是也有一些内容值得记录下来。

  • #import 相比 #include 不会重复导入同一个文件。

  • 初始化方法中应该直接访问实例变量,而不是调用存取方法。

  • 头文件的排列顺序,实例变量、类方法、初始化方法、其它方法。

  • @import 表示编译器会优化预编译头文件和缓存编译结果的过程,文件中不再明确引用框架,编译器会根据@import 自动导入相应的框架,只有 Apple 提供的框架可以使用@import

  • 集合类保存的是指向对象的指针,而不是对象本身。

  • nonatomic 不是默认的类型,所以要主动写出。读写的默认是 readwrite

  • unsafe_unretained 用于纯量类型,表示会直接为实例变量赋值。在 ARC 之前,这种类型用的是 assign。unsafe_unretained 也用于对象类型,但是对象被销毁时,指针不会自动置 nil,而是成为空指针,而 weak 会。非对象类型,默认是unsafe_unretained,对象类型默认是 strong。copy 用于有可变子类的对象。使用 copy 具有防御性,防御其他程序员的修改。

  • 存取方法都被覆盖,就不会自动生成实例变量了。如果要自定义属性的合成方式,使用@synthesize,使用@synthesize age; 这样生成的实例变量和方法名相同。

  • view的 superView 属性使用弱引用避免循环引用

  • hpyot 函数,求勾股的弦长

  • 带有 ref 的也是对象,也是在堆上分配内存。使用带有 create、copy 的需要 release。

  • 重绘 setNeedDisplay 后调用 drawRect,每个事件处理周期只调用一次 drawRect

  • 子类无法访问父类在类扩展中的属性和方法

  • 视图控制器创建的时候,view 属性为 nil,当需要展示的时候,才会调用 loadView 方法。

  • 插座变量用 weak 是因为,内存不够的时候,视图控制器会释放其 view,如果不是 weak 的话,这些子视图释放不了。

  • initWithNibName:bundle:是视图控制器的指定初始化方法。

  • 委托方法的第一个参数应该是对象自身,是因为可能会有多个对象使用同一个委托,传入自身是给委托判断用的。

  • 不能为协议创建对象、添加实例变量

  • 静态变量和全局变量一样,不是保存在栈中的,所以不会再方法返回时释放

  • @class 不需要知道细节,节省编译时间。

  • removeObjectIdenticalTo: 和 removeObject: 区别,前者会枚举数组,向每一个对象发送 isEqual: 消息,后者只会比较指向对象的指针。

  • UIViewController 对象默认有一个 editButtonItem 属性

  • 摄像类型 kUTTypeMovie 加入 mediaTypes ,可以将视频存入相册,一个函数。kUTTypeMovie 是 ref 类型的,需要桥接成 NSString

  • 长按手势默认识别持续0.5s 以上的触摸

  • 基准线,大部分视图的基准线与底边相同。例外是 UITextField,其基准线是文本区域的底边

  • UIImageView 固有内容的大小是显示图片的尺寸

  • dismiss 应该是present 的那个控制器负责 dismiss,需要后面的控制器调用 presentingViewController 属性来获取。

  • 模态时负责模态的是该控制器的 root 控制器

  • 取沙盒目录是为什么返回的是 array 对象,因为 macOS 的缘故,可能会匹配到多个

  • 锁屏进入的是未激活状态 后来运行10s 会进入挂起状态,内存过低时,会终止挂起状态

  • 集合类中元素可写入的对象包括 NSString NSNumber NSDate NSData NSArray NSDictionary

  • cell里面包含了 UIScrollView 因为可以左划删除

  • Block对象是在栈中创建的,为了使方法返回时 block不被销毁,使用 copy 可以将 block拷贝到堆中,这样就不会在方法返回时被释放了。block 对捕获的 OC对象有强引用

  • JSON(JavaScript Object Notation)

  • URL 中不许出现空格和双引号,需要转义 stringByAddingPercentEscapesUsingEncodeing:

  • NSURLRequest 默认使用 GET

  • 归档的缺点是整存整取,coredata 可以增量读取,更新,删除,插入

  • 进入后台会生成快照,启动时代替启动图片

  • 状态恢复,没见过的,用到了再翻翻

  • 本地化,国际化可以参考

  • NSUserDefault 还跟设置里面对应的应用下的设置有关,没什么卵用

  • 弹簧动画,一个是阻尼,从0到1,表示阻力大小,越大越不会弹。另一个是初始速度,通常是0,表示动力大小

  • 可以从 UIColor 中取 rgb 的数值,有这个方法

  • 仍有一些没写到的,但也可能记不住的,因为这个书多而不深。