zoukankan      html  css  js  c++  java
  • OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

    1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到;

    当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下

    // 声明

    @interface  类名  (分类名称)

    @end

    // 实现

    @implementation 类名 (分类名称)

    @end

    2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发;

    3:分类使用注意:

      a:分类不能增加成员变量,只能对原类增加方法;

      b:分类方法实现中,可以访问原来类的成员变量;

      c:分类可以写和类同名的方法,但是这样会覆盖掉原来类的方法,导致永远访问不到原来的类的方法,所以不建议这么做;

        调用顺序:分类——找不到方法时去——>原来类——找不到方法时去——>父类;可见分类的调用优先级最高;

      d:当一个类有单个分类时,且每个分类都由同名方法,调用顺序和编译的顺序有关,最后编译的方法会覆盖先编译的方法,所以最后编译的会被调用;

     

     

     

    分类的应用:给NSString增加方法,计算一个字符串中数字的个数;

    // 在NSString+intSum.h文件中
    //  对NSString类添加一个类方法和对象方法,计算字符串中整数的个数;
    
    #import <Foundation/Foundation.h>
    
    @interface NSString (intSum)
    
    
    //对NSString类添加一个类方法,计算字符串中整数的个数,声明
    + (int)intSum:(NSString *)str;
    
    // 对象方法的声明
    - (int)intCount;
    
    @end
    
    
    // 在NSString+intSum.m文件中
    
    @implementation NSString (intSum)
    
    // 类方法的实现
    + (int)intSum:(NSString *)str
    {
        int count = 0;
        for (int i = 0; i<str.length; i++) {
            int temp = [str characterAtIndex:i];
            if (temp > '0' && temp < '9') {
                count++;
            }
        }
        return count;
    }
    
    
    // 对象方法的实现,只需调用类方法就可以了;
    - (int)intCount
    {
        return [NSString intSum:self];
    }
    
    @end
    
    
    // 在main中测试
    
    int main()
    {
        
        int sum = [NSString intSum:@"234df56"]; // 调用类方法
        
        int count = [@"234sd454545" intCount]; // 调用对象方法
    
    
        NSLog(@"sum=%d, count=%d", sum, count);
        return 0;
    }

     

  • 相关阅读:
    无线网络安全标准是什么?漏洞是怎样产生的
    揭秘英特尔处理器如何启动?
    数据包级网络遥测和网络安全推送分析
    自动化与网络工程之间的关系
    ElementUI中的el-table中实现动态添加一行、删除一行、清空所有行
    ElementUI中的el-table实现多选框不勾选的提示
    Nodejs中的fs模块的使用
    ElementUI中的el-table怎样实现多选与单选
    MyBatis中针对if-test的参数为指定值的xml写法
    SqlServer中怎样从Excel中导入数据
  • 原文地址:https://www.cnblogs.com/cxbblog/p/3721288.html
Copyright © 2011-2022 走看看