zoukankan      html  css  js  c++  java
  • OC语言类的深入和分类

    OC语言类的深入和分类

    一、分类

    (一)分类的基本知识 

    概念:Category  分类是OC特有的语言,依赖于类。

    分类的作用:在不改变原来的类内容的基础上,为类增加一些方法。

    添加一个分类:

    文件结构图:

     

    在分类中添加一个方法

     

    Study方法的实现

     

    测试程序:

     

    (二)分类的使用注意

    (1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量

    (2)在分类方法的实现中可以访问原来类中的成员变量;

    (3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警告);

    (4)方法调用的优先级:分类->原来的类->父类,若包含有多个分类,则最后参与编译的分类优先;

    (5)在很多的情况下,往往是给系统自带的类添加分类,如NSObjectNSString,因为有的时候,系统类可能并不能满足我们的要求。

    (6)在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。

     

    (三)分类编程练习

    (1)给NSString类增加一个类方法,计算某个字符串对象中阿拉伯数字的个数;

    (2)给NSString类增加一个对象方法,计算当前字符串对象中阿拉伯数字的个数;

    分类中方法的声明

     

    分类中方法的实现

     

    测试程序:

     

     

    二、类的深入研究

    (一)类的本质

    类本身也是一个对象,是class类型的对象,简称“类对象”。

    Class类型的定义:

    Typedef struct obj class *class;

    类名就代表着类对象,每个类只有一个类对象。

    利用class 创建 Person

    利用Person 创建Person类型的对象

    Person *p=[[Person alloc] init];

     

    获取内存中的类对象有两种方法:

    (1)class c=[p claa];//指向类的对象的指针调用class方法

    (2)Class c1=[Person class];//使用类名调用class方法

    注意:cc1打印出来的地址相同,class c2=[p claa];可以证明所有的对象共用一个类方法。

    (二)类的加载和初始化

     

    测试程序:

     

    1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法,只会调用一次;

    2.当第一次使用某个类时,就会调用当前类的+initialize方法;

    3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法,最后调用分类的+load方法),先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)。

    4.注意:在初始化的时候,如果在分类中重写了+initialize方法,则会覆盖掉父类的。

    5.重写+initialize方法可以监听类的使用情况。

  • 相关阅读:
    CodeForces 156B Suspects(枚举)
    CodeForces 156A Message(暴力)
    CodeForces 157B Trace
    CodeForces 157A Game Outcome
    HDU 3578 Greedy Tino(双塔DP)
    POJ 2609 Ferry Loading(双塔DP)
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛十六进制转换成十进制
  • 原文地址:https://www.cnblogs.com/fengpuchao/p/4798277.html
Copyright © 2011-2022 走看看