• IOS 语法


    在Objective-C中,给一个类扩展一个其它方法,有两种实现方式:类别和继承。
    1.继承Inherit
      这个是面向对象语言都有的一个特性,子类会继承父类的方法和属性。
      对于以下情况,无法使用类别,必须使用继承。

    1. 新扩展的方法与原方法同名,但是还需要使用父类的实现。因为使用类别,会覆盖原类的实现,无法访问到原来的方法。
    2. 扩展类的属性,这个类别无法做到。

    示例代码:

    //  ViewControllerEx.h
    @interface ViewControllerEx : UIViewController
    //自己需要添加的方法
    @end
    // ViewControllerEx.m
    @implementation ViewControllerEx
    // 方法的实现
    @end

    2.类别category
      这是Objective-C语言的一个特性,可以在不改变类名和原来类的实现的前提下,实现对类的方法扩展。Category不能用于向被扩展类添加实例变量。

    示例代码:

    // 这里有一个约定俗成的规定,类别文件命名时,是原类名+扩展标识名
    //  NSString+ex.h
    @interface NSString (ex)
    // 扩展的类回别方法
    @end
    //  NSString+ex.m
    @implementation NSString (ex)
    // 方法的实现
    @end


    3、以下两种方式最后使用类别。

    1. 针对系统提供的一些类,例如:NSString,NSArray,NSNumber等类,系统本身不提倡使用继承去扩展方法,因为这些类内部实现对继承有所限制,所以最后使用类别来进行方法扩展。
    2. 类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,对于大型而复杂的类,这有助于提高可维护性,并简化单个源文件的管理。
  • 相关阅读:
    蓝桥杯算法训练 区间k大数查询
    【模板】快读
    [ACM] hdu 2544 最短路(dijkstra算法)
    [ACM] hdu 3791 二叉搜索树
    [ACM] hdu 2141 Can you find it? (二分查找)
    [ACM] hdu 2025查找最大元素(水题)
    [ACM] hdu 1232 畅通工程(并查集)
    [ACM] hdu 1022 Train Problem I(栈的使用)
    [ACM] hdu 2857 Mirror and Light (对称点+两条直线的交点)
    [ACM] hdu 爆头(点到直线距离)
  • 原文地址:https://www.cnblogs.com/ziyeSky/p/4140532.html
Copyright © 2020-2023  润新知