zoukankan      html  css  js  c++  java
  • Objective

    在我们开发中, 如果要给一个类扩充一些方法, 那么我们应该会选择使用继承, 但问题来了, 如果是使用继承, 那么我们就又要创建对象, 写更多的代码, 更加的麻烦了, 而类别(Category)就可以为我们解决这一类的问题.




    下面让我们来一起来看看例子:

    #import <Foundation/Foundaiton.h>
    
    @interface Person : NSObject
    - (void)test;
    @end
    
    @implementation Person
    - (void)test
    {
        NSLog(@"调用了test方法");
    }
    @end
    

    上面就是我们平常所定义的一些方法, 如果我们需要在这基础上添加一些方法, 但不能去修改原来类的代码, 那么就可以使用类别来添加:



    类别的命名规范:

    类名+(分类名称)

    分类名称可以是人名也可以是其他, 按照个人喜好, 下面就是使用类别的例子:

    @interface Person (XMN)
    @end
    
    @implementation Person (XMN)
    @end

    在.h文件中, 我们是会看到#import "Person.h", 在.m文件了会看到#import "Person+XMN", 在.h文件中的引用头文件是告诉编译器, 我们是给什么类名添加类别, 而在.m文件的引用头文件, 是告诉编译器, 我们这个类别名是什么.



    完整的例子:

    #import <Foundation/Foundaiton.h>
    
    @interface Person : NSObject
    - (void)test;
    @end
    
    @implementation Person
    - (void)test
    {
    	NSLog(@"调用了test方法");
    }
    @end
    
    
    @interface Person (XMN)
    - (void)cry;
    @end
    
    @implementation Person (XMN)
    - (void)cry
    {
    	NSLog(@"大声的哭");
    }
    @end
    
    int main()
    {
    	Person *p = [[Person alloc]init];
    	[p test];
    	[p cry];
    
    	return 0;
    }



    下面是在Xcode上的类别声明和实现:



    如果要加多个类别, 那就继续添加, 这个不会影响原来的类, 反正会提高我们的团队合作.





    注意:

    1. 分类只能添加方法, 不能添加成员变量, 否则会报错.

    2. 分类方法实现中是可以访问我们原来类的成员变量.

    3. 当分类中的方法名与原来类的方法名相同, 那么就会执行分类中的方法, 而不会执行原来类的方法, 坏处是会覆盖原来类的方法, 会导致原来类的方法失效, 所以不建议写方法名重复.

    4. 方法调用的优先级: 分类 ---> 原来类 --->父类

    5. 如果在项目中有两个类别, 它们都有相同名字的方法, 最后显示出来的结果是最后参与编译的类别方法, 这个是由编译文件顺序所决定的. (在项目的Build Phases中可以查看)




    好了, 这次我们就讲到这里, 下次我们继续~~~

  • 相关阅读:
    js获取下拉框的值
    根据SNP的位置从基因组提取上下游序列
    PCA分析的疑问
    os删除文件或者文件夹
    python scipy包进行GO富集分析p值计算
    生物信息等级的划分
    docker笔记
    GATK4注意事项
    centos7修改yum源为阿里镜像
    idea如何通过数据库生成实体类
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282837.html
Copyright © 2011-2022 走看看