iOS开发 - Objective-C语言 | OC中类方法的使用介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CodeByCoder/article/details/71107753

昨天提到了 OC 中对象方法的使用,也就是在方法之前是减号表示的方法,今天来看一下加号表示的方法,也就是类方法的使用 。

由于对象方法,我们在使用之前必须要有一个初始化对象的操作,就像昨天提到的那个初始化对象 p 一样,如果没有对象 p ,那么我们是无法调用对象方法并使用它的,由于每次调用对象方法都需要创建对象并初始化开辟存储空间,所以如果我们不想要每次都创建新的对象,或者说需要临时的使用一下某个方法,而这个方法又刚好没有使用到属性,即没有使用到成员变量,那么我们就可以把这个方法定义为类方法 。


比如现在有一个方法,实现两个数相加,这个方法的使用就完全用不到属性成员变量,所以我们就可以将其定义为类方法,声明代码如下:


+ (int)sumWithValue1:(int)value1 andValue2:(int)value2;


实现代码如下:


+ (int)sumWithValue1:(int)value1 andValue2:(int)value2 {    
    return value1 + value2;
}


这样在 main 方法中进行调用时,代码如下:


int result = [Iphone sumWithValue1:10 andValue2:20];
NSLog(@"result = %d", result);


运行结果:


result = 30


这里需要注意,对象方法可以和类方法一模一样,只需要将这里的加号 + 换成减号 - 就变成了对象方法,并且两个方法是不一样的方法,Xcode 不会提示方法重复 。


同时,不管我们在声明时声明的是类方法还是对象方法,我们都必须在代码实现部分去实现它们 。


现在我们一起来看一下对象方法和类对象之间的区别?为什么要一起来看一下它们的区别呢,因为部分正在看文章的朋友肯定会好奇一件事,既然类方法这么好用为什么我们不直接用类方法,还要什么对象方法干什么,浪费我们的存储空间,不知道大家是不是会有这么一个疑问呢,所以接下来我们来看一下它们之间的区别:


  1. 对象方法中可以直接调用类方法;

  2. 类方法中可以直接调用对象方法(不建议这样使用);

  3. 类方法中可以直接调用其他类方法;

  4. 对象方法中可以直接调用其他对象方法。


类方法一般用于定义工具方法,比如:字符串查找,文件操作和数据库操作 。


接下来,我们来看一下一个类方法的应用实例,现在我们有一个 iPhone 手机,它有三个颜色:黑色、白色和金色,我们先定义一个枚举,并用 typedef 给它起了一个别名,代码如下:


typedef enum {
    kIColorBlack,
    kIColorWhite,
    kIColorGold,
} IColor;


定义好枚举后,我们在代码声明部分对它进行声明,代码如下:


IColor _color;


修改之前的 info 方法,用 switch 语句对颜色进行判断,代码如下:


- (void)info {    
    NSLog(@"This is iPhone.");    
    // 如果在对象方法中想访问该对象的属性,可以直接写_属性名称即可
    NSLog(@"颜色 = %i", _color);    
    NSString *name;    
   switch (_color) {        
        case 0:
            name = @"黑色";            
           break;        
        case 1:
            name = @"白色";            
          break;        
        case 2:
            name = @"金色";            
          break;            
        default:
            name = @"不知道";            
          break;
    }    
    NSLog(@"颜色 = %@", name);
}


现在在 main 方法中对其进行调用,代码如下:


// 定义颜色
p->_color = kIColorGold;
//给对象发送消息
[p info];


运行结果:


颜色 = 2
颜色 = 金色


这时候我们可以看出刚刚的操作其实就是一个功能,所以我们可以将其封装到一个方法中,声明代码如下:


+ (NSString *)colorWithNumber:(IColor)number;


实现代码如下:

+ (NSString *)colorWithNumber:(IColor)number {
    NSString *name;    
    switch (number) {        
        case 0:
            name = @"黑色";            
          break;        
        case 1:
            name = @"白色";            
          break;        
        case 2:
            name = @"金色";            
          break;            
        default:
            name = @"不知道";            
          break;
    }    
    return name;
}


这就是相关类方法的使用介绍 。

以下为我的个人公众号,会定期推送苹果开发相关内容,欢迎关注。


猜你喜欢

转载自blog.csdn.net/CodeByCoder/article/details/71107753