• 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;
    }

     

  • 相关阅读:
    怪异恼人的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream问题的解决
    Spring3的quartz定时任务
    HTML模板
    SpringMVC 下载XLS文档的设置
    若想在当前路径下去运行非当前路径下的.class文件(即java可执行文件),该如何操作?
    霍金去世 享年76岁
    Github全面学习笔记
    Github上如何在Fork到的开源项目中提交Pull requests?
    Github中如何Fork开源项目?
    Java永久代去哪儿了
  • 原文地址:https://www.cnblogs.com/cxbblog/p/3721288.html
Copyright © 2020-2023  润新知