黑马程序员--IOS学习笔记(类和分类category)

---------------------- <a href="http://www.itheima.com"target="blank">iOS开发</a>、期待与您交流! ----------------------

一、类(类的本质)

1.  类也是个对象

       1> 其实类也是一个对象,是Class类型的对象,简称“类对象”

       2> Class类型的定义

            typedefstruct objc_class *Class;

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

2. +load和+initialize

      +load

     *  在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法

     *  先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load

     * 先加载元原始类,再加载分类

     * 不管程序运行过程有没有用到这个类,都会调用+load加载

      +initialize

    *  在第一次使用某个类时(比如创建对象等),就会调用一次+initialize方法

    * 一个类只会调用一次+initialize方法,先调用父类的,再调用子类的

3. 获取类对象的2种方式

       Class c = [Personclass]; // 类方法

        或者

        Person *p = [Personnew];

       Class c2 = [pclass]; // 对象方法 

4. 类对象调用类方法

      Class c = [Personclass];

      Person *p2 = [cnew];

二、分类(category)

        通过分类(category)可以以模块的方式向现有的类添加方法。 它提供了一种简单的方式, 用它可以将类的定义模块化到相关方法的组或分类中。它还提供了扩展现有类定义的简便方式,并且不必访问类的源代码,也无需创建子类。 

1. 基本用途

      如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式

      1> 继承

      2> 分类(Category)

2. 格式

       分类的声明

       @interface 类名 (分类名称)

       // 方法声明

       @end

        分类的实现

       @implementation 类名 (分类名称)

      // 方法实现

       @end

3. 好处

     1> 一个庞大的类可以分模块开发

     2> 一个庞大的类可以由多个人来编写,更有利于团队合作

4. 给系统自带的类添加分类

      * 给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数

      * 给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数

5. 注意

      1> Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类

      2>  Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法

      3>  多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效



---------------------- <a href="http://www.itheima.com"target="blank">iOS开发</a>、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值