昨天提到了 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 不会提示方法重复 。
同时,不管我们在声明时声明的是类方法还是对象方法,我们都必须在代码实现部分去实现它们 。
现在我们一起来看一下对象方法和类对象之间的区别?为什么要一起来看一下它们的区别呢,因为部分正在看文章的朋友肯定会好奇一件事,既然类方法这么好用为什么我们不直接用类方法,还要什么对象方法干什么,浪费我们的存储空间,不知道大家是不是会有这么一个疑问呢,所以接下来我们来看一下它们之间的区别:
-
对象方法中可以直接调用类方法;
-
类方法中可以直接调用对象方法(不建议这样使用);
-
类方法中可以直接调用其他类方法;
-
对象方法中可以直接调用其他对象方法。
类方法一般用于定义工具方法,比如:字符串查找,文件操作和数据库操作 。
接下来,我们来看一下一个类方法的应用实例,现在我们有一个 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;
}
这就是相关类方法的使用介绍 。
以下为我的个人公众号,会定期推送苹果开发相关内容,欢迎关注。