(原)OC基础整理
@class和#import
import会包含所有信息,包括实体变量和方法
class 只告诉你后面声明的名称是类的名称
一般在头文件使用@class,实现类再把#import
#import解决死锁问题,例如A#importB,B#importA,就会编译错误,一方使用@class 即可
static关键字
类体内的全局变量声明
static int gCount = 0;
声明在任何方法之外,在该文件中,位于这条语句之后的都可以访问gCount,其他文件中的方法不行
多态的条件:有继承关系,有方法重写,父类的声明变量指向子类对象
类别Category
无法添加新的实例变量
1.对现有类进行扩展
2.作为子类的代替手段
3.对类中的方法归类
延展(Extension)
匿名Category
1.通过延展定义私有方法(.m)
协议(Protocol)
专门被别的类实现的一组方法
1.需要别的类来实现
2.声明未知类的接口
3.两个类之间的通信
设计模式
委托代理(让别的去干事情)、单例、观察者(KVO,NSNotification)
单例设计模式
1.声明单件对象的静态实例,初始化为nil
2.创建一个类工厂方法,声称一个该类的实例
3.覆盖allocWithZone: {直接return 静态对象}
4.实现<NSCoding>协议 覆盖release autorelease retain retainCount 方法
5.多线程环境下, 用@synchronized确保正确的创建和初始化
通信方式
委托代理(一对一)、KVO、NSNotification(一对多)、block(回调)
文件管理
沙盒机制:iOS应用程序只能对自己创建的文件系统读取文件,这个独立的空间,我们称为沙盒。
复制对象
1.必须实现<NSCopying>< NSMutableCopying >协议
2.常用复制对象:NSNumber NSString NSArray、NSDictionary 可变的…
3.copy:产生对象副本不可变 mutableCopy产生副本可变
深拷贝,浅拷贝
浅拷贝:只赋值对象本身
深拷贝:赋值对象本身,对象的属性也复制
Foundation支持复制的类,默认是浅拷贝
对象自定义拷贝
必须实现<NSCopying><NSMutableCopying>协议的copyWithZone 和mutableCopyWithZone方法
深浅拷贝的区别在于copyWithZone的实现方式
数据持久性的方式
1.NSKeyedArchiver ——对象归档
2.属性化列表(NSArray、NSDictionary)、NSUserDefaults
3.SQLite数据库、Core Data数据库
KVC、KVO
KVC:通过kvc可以过去不存在getter方法的对象值,无需通过对象指针直接访问
KVO:1.注册观察者
2.监听的属性发生改变实现observeValueForKeyPath方法
3.移除观察者