OC加强笔记2

来源:互联网 发布:高中数学刷题软件 编辑:程序博客网 时间:2024/05/16 15:32

1.快速初始化一个对象,并且加入自动释放池。

    1)自定义构造方法:1>先初始化父类,并判断是否初始化成功。2>初始化子类。3>返回self。

    2)定义类方法:
     代码:
    注意!!!!!!!!!  此处若使用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文件中,为原类,增加实例变量和方法,此处为相对私有变量,相对私有方法。只能在类的内部去调用。

                           注意:::类扩展的方法,无法被子类继承!!!!

                                类扩展与分类的区别:类扩展没有分类名称,所以也有人称之为:匿名分类。




0 0
原创粉丝点击