zoukankan      html  css  js  c++  java
  • ios 类别和扩展-赵小波

    类别

    @interface ClassName ( CategoryName )
    // method declarations
    @end

    Category在iOS开发中使用非常频繁尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性

    注意事项

     

    1:类别是类的扩展,只可以声明方法,不可以声明变量。并且,类别的方法优先级较高,可覆盖原类方法。

     

    2:类别的方法中,不可以调用super方法。--类别的局限 

     

    3:category 方法不能覆盖于同一class 的其它 category 中的方法。因为不法预知他们的加载优先顺序,就可能在编译时出错。

    使用类别:

     

    1。对框架提供类的扩展(没有源码,不能修改)。

     

    2。 不想生成一个新的子类的情况下,比如对 NSArray 的扩展。

     

    3。 方便做项目管理,可以将一份源码在多个地方共享或者做方法版本管理、多人协作开发、用本地版本替换公共版本实现。

    扩展:

    1:某些情况下,我们需要声明一个@property,它对外是只读的(readonly),而对内是可读写的(readwrite),这时,可以通过Extensions实现

     

    @interface BaseClass : NSObject
    @property (readonly) NSString *privateString;
    @end
    
    // .m
    @interface BaseClass()
    @property (readwrite) NSString *privateString;
    @end
    
    @implementation BaseClass
    @synthesize privateString;
    //...
    @end

    2:使编辑器可以更好的验证类的私有的方法或者变量

    
    
    
    
    
    @interface BaseClass()
    
    - (void)doSomethingPrivate;
    
    @end
    
    @implementation BaseClass
    //...
    @end
    
     

     

     

     

  • 相关阅读:
    PL/SQL Developer 远程连接Oracle数据库
    常用js代码学习
    三元运算 多条件嵌套
    在后台CS文件里面,隐藏和显示Repeater里面控件
    最小二乘线性及平面拟合原理及C++实现
    C++的顶层const 和 底层const
    vs2019上遇到的一个未预指定引用函数的静态库导致的问题
    一个基础QItemDelegate检查器类
    linux 基础命令及快捷键
    lambda表达式
  • 原文地址:https://www.cnblogs.com/sixindev/p/4572091.html
Copyright © 2011-2022 走看看