黑马程序员技术交流社区
标题: OC笔记2 [打印本页]
作者: amoshaxiangp 时间: 2015-11-11 02:56
标题: OC笔记2
1.快速初始化一个对象,并且加入自动释放池。
1)自定义构造方法:1>先初始化父类,并判断是否初始化成功。2>初始化子类。3>返回self。
2)定义类方法:
代码:
{CSDN:CODE:1318059}
注意!!!!!!!!! 此处若使用id类型,则NSstring * s= [Person initWithName:@"name"]; 也可以编译成功,所以要使用instancetype ,可以帮助我们进行类型检测。
2.自动释放池的使用。
1> autorelease方法:使用autorelease方法可以将对象加入到当前对象释放池中,在释放池释放的时候,对池中所有对象发送一次release消息。注意,无论在何处调用autorelease方法,都不会造成对象的释放,此处是释放池延缓了release消息的发送时间,对性能有影响。在可以确定对象释放准确时机的时候,尽量不要使用对象释放池。
2>@autoreleasepool关键字:创建一个自动释放池。@autoreleasepool { } 定义的结构。
3> 自动释放池的栈结构:与内存中的堆栈不同,此处指的是自动释放池的嵌套规则,是栈结构的。遵循先入后出原则,嵌套的时候,会按照先内后外的顺序去释放。
3.ARC介绍
1>ARC是编译器特性,编译器在合适的地方加入release ,autorelease ,retain 。底层其实还是MRC。
2>ARC判断原则:当一个对象没有强指针指向的时候,对象就会被释放。_ _weak *p=[person new] 。此为创建一个弱指针。
3>循环strong问题:与MRC中的循环retain问题一样,此时应该一个strong ,另外一个使用weak。
4>MRC代码兼容ARC:-fno-objc-arc 不使用ARC,-f-objc-arc 使用ARC ,在ARC项目中可以使用MRC的类。
4.分类 Category
1>分类的作用:将一个类的不同方法分到不同的文件中存储,便于对类进行模块化设计,以及团队合作开发。
可以在不修改源文件的基础上,为这个类扩充一些方法。
注意:!!! 分类中只能增加方法,无法增加实例变量。 分类中可以访问原类的实例变量。
2>主类,分类调用优先级的问题:主类,分类同时有一个同名方法时,优先调用分类的。当有多个文件含有同名方法时, 文件编译越晚,调用优先级越高。
3> 非正式协议:给NSObject 类或者它的子类,也就是Foundation框架中提供的类增加的分类,就是非正式协议。
4>延展,延展类别,扩展:
类扩展在新的 .h文件中,为原类,增加实例变量和方法,此处为相对私有变量,相对私有方法。只能在类的内部去调用。
注意:::类扩展的方法,无法被子类继承!!!!
类扩展与分类的区别:类扩展没有分类名称,所以也有人称之为:匿名分类。
作者: 许本亮 时间: 2015-11-11 09:26
学习,学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |