iOS 之 oc 概述
OC
基本类型
- 标量类型
- int, long, char, float, double .(unsigned)
- integer(int/log), CGFloat(float/double)
- BOOL(YES/NO)
- 枚举
- 衍生类型
- array, struct, function, union
Foundation
- NSNumber 将基本类型封装成对象;NSNumber 支持字面量
- NSString,其字面量的写法类似于
@"a string"
- NSData & NSDate
- NSData: 数据的二进制表示(bytes封装); Encoding&Decoding
- NSDate:时间处理和日期表示;简单时间戳获取
- NSArray
NSArray *array = @[@1, @2, @3]
- 数组越界处理和nil保护
- NSDictionary
- NSString、NSArray、NSDictionary 的属性要用copy
- 集合的深浅拷贝
Define Class
- 继承关系
- 属性: property
- ivar 成员变量
- getter && setter
- 修饰符: copy、strong、assign、weak的用法
- 函数(method)
category 和 Extension
protocol
- Protocols Define Messaging Contracts
- 开闭原则, 抽象类的功能,隐藏具体实现类
- 协议可以继承于其他协议
- 协议的约束是比较弱的,往往只会产生警告,而不会影响最终编译的通过
Method Dispatch
- 定义和实现
- 函数重载(NO)函数覆写(YES)
- 子类有父类的同名方法
- selector vs. method
- selector 就是 char *
- method 地址是函数地址
- objc_msgSend
- method lookup
- Type encoding

Memory management
- ARC : 自动引用计数
- 手动调用 retain/release/autorelease
- 内存管理困难,容易内存泄露和野指针
- 引用计数和MRC
- strong, weak , assign
- ownership 和对象引用图
- 最佳实现
- 基本类型 assign
- deltegate 用weak
- NSarry、NSDictionary和NSString, block 用copy
- 其他用strong
- block 中self用weak打破循环引用
- 避免引用环 A- strong-> B-strong -> C-strong-A
- Autoreleasepool
- 循环引用
Block
- Block Type
- inline block
- global block
- As a property && param
- Capture Var
- 值拷贝(指针则拷贝指针地址, const)
- __block(heap var, mutable)
- 避免循环引用
- self->task->block->self
- self->task->block->weakSelf
RunTime