黑马程序员—OC语言基础—方法小结

本文详细介绍了Objective-C编程语言中对象方法与类方法的区别,包括它们的创建方式、调用方式以及适用场景。通过实例演示了如何在实际编程中运用这些概念,帮助开发者更高效地解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———————

OC中方法分为对象方法与类方法,从名称中就能体会到这两种的主要区别就是一个是针对对象要实现的方法,另一个是针对类要实现的方法。下面我们来看一下这两种方法分别怎么用,在哪里使用。

1.对象方法与类方法的创建

@interface Person : NSObject
{//定义成员变量
    @public
    int _age;  //年龄
    NSString *_name;  //姓名
}
+ (void)nameOfClass;
- (void)eat;
@end

@implementation Person
+ (void)nameOfClass
{
    NSLog(@"这个类的类名叫Person");
}
- (void)eat
{
    NSLog(@"吃了一顿饭");
}
@end

上面的程序可以看出,两种方法的写法是略有不同的。+开头的是类方法,-开头的时对象方法。

那么这两个方法在main函数中又是如何调用的呢?调用方法如下:

int main()
{
    //创建新对象p
    Person *p = [[Person alloc] init];
    //给p所指向的对象发送一个eat消息
    [p eat];
    //调用类方法
    [Person nameOfClass];
    return 0;
}

我们看上面程序,再结合对象方法和类方法的命名,就明白了。当要调用对象方法时,需要先创建一个新的对象,再用对象才能发送消息。而类方法却不需要,是直接利用类名调用类方法的。

所以,我们总结出一个重要的规律:

对象方法:是通过对象来调用的。

类方法:是通过类来调用的。


拓展思考:

那为什么要区分对象方法和类方法呢?

这是由于类方法和对象方法的存储空间不同所导致的。我们知道,类和对象是存在不同的存储区间的,一个在静态区,一个在堆内,方法是存放在静态区的,类的方法可以直接访问,对象的方法则要通过 isa 来间接访问。所以就必须有两个不同的方法来调用。

另外,在实际的使用中有的方法必须通过类方法来实现,比如对象的创建本身也是一个方法(alloc存储分配),调用这个方法的时候,对象还没创建出来;有的方法则不需要创建对象,比如我们创建一个数学函数库,内部不设计个性化的属性,这自然也就不需要创建对象来浪费空间,这样也就需要用到类方法。

2.对象方法细节

对象方法的创建比较自由,可以直接调用对象属性,当然,不调用对象属性也是可以的。能用类方法创建的方法,用对象方法也能创建,创建方法与类方法类似。

- (返回值类型)含参数A的类方法名:(参数A类型)参数A    参数B名称:(参数B类型)参数B ... { 代码 }

例如:

- (void)compareWithOther:(NSString *)str
{
    NSLog(@"%@,%@", self->name, str);
}
有时候,在对象方法中我们需要传入一些参数进行比较。

3.类方法细节

由于类方法中只有类,没有对象,所以不能获取对象中的属性。因此不能够直接访问对象中的成员变量,因此我们在没有成员变量的工具类的类对象中,我们一般都用类方法来描述我们的行为。这样执行效率更高。

例如:

类方法的创建格式如下:

+ (返回值类型)含参数A的类方法名:(参数A类型)参数A    参数B名称:(参数B类型)参数B ... { 代码 }

+ (double)sumA:(double)a andB:(double)b{ // 注意这里的参数是从外部访问的
    return a + b;
}

总结一些类方法的好处和使用场合:

1)类方法不依赖于对象,执行效率高。

2)能使用类方法的尽量用类方法实现。

3)使用场合:当方法内部不需要使用到成员变量时,就可改用类方法。

4)另外,可以允许类方法与对象方法同名!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值