1.类扩展,类目的具体写法
2.垃圾回收机制:
1. autorelease只是延迟释放,gc(垃圾回收机制)是每隔一段时间询问程序,看是否有无指针指向的对象,若有,就将它回收,它们两者是没有什么关系的
2. AutoreleasePool的真名是NSAutoreleasePool,内部包含一个可变数组NSMutableArray,用来保存声明为autorelease的所有对象,如果一个对象声明为autorelease,系统所做的工作就是把这个对象加入到这个数组中(比如ClassA *obj1=[[[ClassA alloc]init]autorelease];),然后NSAutoreleasePool自身在销毁的时候会遍历一遍这个数组,release数组中的每个成员,如果此时数组中成员的retain count为1,那么release之后,retain count为0,对象正式被销毁,如果此时对象的retain count大于1,那么release之后,retain count大于0,此时对象依然没有被销毁,发生内存泄露。
OC内存管理机制
OC的内存管理机制与.Net和JAVA那种全自动的垃圾回收机制是不同的,它本质上还是c语言中的手动管理方式,只不过稍微加了一些自动管理方法
1. OC的对象生成于堆上,生成之后,需要一个指针来指向它,对象在使用完之后不会销毁,需要执行dealloc来释放空间(销毁),否则内存泄露
3. 口诀:谁创建,谁释放,如果你通过alloc,new或copy生成了一个对象(只有这三种),那么你必须调用release或者autorelease。换句话说,不是你创建的,就不用你去释放
4.如果你在一个函数中alloc生成了一个对象,且这个对象只在这个函数中被使用,那么你必须在这个函数中调用release或者autorelease,如果你在类方法中alloc一个成员对象,且没有调用autorelease,那么你需要在这个类的dealloc方法中调用release,如果调用了autorelease,那么你在dealloc中就什么都不需要做
5. 谁retain,谁release,只要你调用了retain,无论这个对象是如何生成的,你都要调用release,
有时候你的代码中明明没有retain,可是系统会默认在实现中加入retain
3.Core data框架
core data是cocoa中处理数据,绑定数据的关键特性。
4.组播
5.tableView的复用机制
查看UITableView头文件,会找到NSMuTableView* visiableCells和NSMutableArray* reusableTableCells两个结构。visiableCells内保存当前显示的cells,reusableTableCells保存可重用的cells。
TableView显示之初,reusableTableCells为空,那么tableView的复用队列返回为空,开始的cell都是通过UITableViewCell alloc来创建,而且cellForRowAtIndexPath只是调用最大显示cell数的次数。
比如有100条数据,iPhone一屏最多显示10个cell,程序最开始的显示是10个cell全部都加入到visiableCells数组,reusableTableviewCells为空,
向下拖动tableView,当cell完全移除屏幕,并且cell完全显示出来的时候,cell加入到visiableCells,cell移除visiableCells,cell加入到reusableTableViewCells。