自动释放池的基本概念
cocoa中有一个自动释放池(Autorelease pool)的概念,顾名思意,它是可以存放一些实体的集合,在这个自动释放池中的对象,是能够被自动释放的,NSObject类提供了一个autorelease消息,当我们向一个对象发送autorelease消息时,这个对象就被放入了自动释放池。
创建自动释放池
@autorelease{
//5.0之后
}
NSAutoreleasePool *pool=[[NSAutorelease alloc]init];
//5.0之前
[pool release];
自动释放池的销毁时间
当我们将一个对象发送了autorelease消息时,当自动释放池销毁时,会对池中的每个对象发送一条release消息,以释放它们。
ARC自动引用技术
MRC手动引用技术
Category
OC提供了一种与众不同的方式--Catagory,可以动态的为已经存在的类添加新的行为(方法)。
使用Category对类进行扩展时,不需要创建子类
这样可以保证类的原始设计规模较小,功能增加时再逐步扩展。
为一个类新增方法时,选择Objective-C-catagory
Category是对一个功能完备的类的一种补充,就像是一个东西的主要基本功能都完成了,可以用category为这个类添加不同的组件,使得这个类能够适应不同情况的需求(但是这些不同需求最核心的需求要一致)。找个就像你已经有了一辆能够开动的汽车一样,我们可以用Category为你的汽车添加各种之前没有的功能,最后让这辆汽车变成超级跑车一样。
当某个类非常大的时候,Category可以按不同的功能将类的实现分在不同的模块中实现。
ARC与非ARC
在ARC项目中使用非ARC的框架解决方案:
在target里的build phases中,找到compile sources,把涉及到非ARC的类,后面加上: -fno-objc-arc
在非ARC的项目中加入ARC类库:
如何在未使用arc的工程中引入一个使用了arc特性的文件:对相应的文件添加: -fobjc-arc