(原)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.移除观察者

 

 

 

 

 

 

 

 

 

posted @ 2013-10-31 23:39  不想当元帅的好兵。  阅读(190)  评论(0编辑  收藏  举报