Objective-C类方法与对象方法、区别、与调用

 

类方法.

1. 特点:

以加号( + )开头,

调用格式:  [类名  方法名]

     类方法的好处:不需要创建实例对象,直 接通过类名访问,节省空间 ,提高了效率

 2.注意事项:

类方法可以和实例方法同名, 相互之间互不影响

 

类方法可以从父类继承而来,子类可以重写类方法 // ,如description类方法

 

类方法和实例方法一样在interface里声明, 在implementation里实现。

 

类方法由类名调用,  实例方法由对象调用。

 

在类方法里使用了self, self指代的是调用者类

 

在类方法中不能使用类的成员变量

 

类方法和对象方法之间不能使用self 相互调用

 

总结self : 谁调用当前方法, self就代表谁

3.对象方法中可以调用其他对象方法

1)当前对象方法中创建对象(可以是当前类的实例对象,也可以是其他类的实例对象),使用新创建的对象调用方法

2)可以使用self

3)对象作为方法的参数传递过来,可以使用传递过来的对象调用方法

 

4.在类方法中可以调用其他类的方法

1)可以直接使用类名(或者其他类名)调用类方法

2)可以使用self

5) 在类方法中可以调用对象方法

1)对象作为方法的参数传递过来

2)可以创建一个对象

 

6.类方法和对象方法的比较

对象方法以减号开头, 可以使用成员变量

类方法以加号开头,不能使用成员变量

 

7.类方法使用场景

如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法

 以下代码是对上述部分知识点的验证

main.m

#import <Foundation/Foundation.h>
#import "Dog.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        // 1. 通过类名调用eat类方法
        [Dog eat];

        // 2. 调用jump类方法
        Dog *dog = [Dog new];
        [Dog jump:dog];

//        [dog bark];

    }
    return 0;
}

Dog.h


#import <Foundation/Foundation.h>

@interface Dog : NSObject
//类方法和实例方法一样在interface里声明。
+(void)eat;

+(void)run;

+(void)jump:(Dog *)dogDog;

-(void)bark;

-(void)sleep;

@end

Dog.m
#import "Dog.h"

@implementation Dog
+(void)eat//类方法和对象方法一样在@implemention中实现
{
    NSLog(@"狗正在吃");
    // 1.类方法里调用类方法 通过类名调用
//    [Dog run];

    // 2. 类方法里调用类方法 通过self
    [self run];
}

+(void)run
{
    NSLog(@"狗跑了");
}

+(void)jump:(Dog *)dogDog
{
    NSLog(@"狗狗在跳");
    [dogDog bark];//类方法里调用对象方法 对象作为方法的参数传递过来


}

-(void)bark
{
    NSLog(@"狗在叫");

    // 1. 调用的类方法
//    [Dog run];

    // 2. 调用对象方法 自己调用自己陷入死循环
//    [self  bark];
}

-(void)sleep
{
    NSLog(@"狗玩累了,要睡觉了");
}
@end

 

 

 

 

函数和对象方法的区别

-(void)run;

(1)对象方法的实现在@implementation...@end中

 

对象方法的声明只能写在 @interface...@end中间

 

(2)对象方法都以-号开头

 

(3)对象方法只能由对象来调用

 

(4)函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end中,但写在 @interface...@end会无法识别,函数的声明可以在main函数内部也可以在main函数外部。

 

(5)对象方法归对象所有

 

函数: void run(){

}

(1)所有的函数都是平行的

(2)函数不存在隶属关系

(3)使用的时候可以直接调用

(4)不可以访问对象中的成员变量

 

对象和方法之间的关系

(1),对象作为方法的参数

-(void) displayPerson:(Person *)person{

    NSLog("姓名:%@",person->name);

}

 

 

 

(2),对象作为方法的返回值

-(Person *)changePerson:(Person *)person{

    person->name = @"唐僧";

    return person;

}

 

转载于:https://www.cnblogs.com/yilizhijiaotianxiashao-yincaiersanshijianduo/p/4725024.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值