ios开发-OC类方法和self关键字的学习

时间:2021-07-24 12:15:44


今天我学习了类方法和self关键字的用法,下面具体讲讲:

一. 方法:OC,方法可以分为类方法和对象方法:

 1.对象方法:

    1)- 以减号开头

    2)只能由对象来调用

    3)对象方法中能访问当前对象的成员变量(实例变量)

 2.类方法:

    1)+ 以加号开头

    2)只能由类名来调用

    3)类方法中不能方位成员的实例变量

 3.类方法的好处

    1)不依赖于对象,执行效率高

    2)能用类方法,尽量用类方法

 4.使用场合:

    当方法内部不需要使用到成员变量的时候,可以使用类方法,可以允许类方法和对象方法同名.

下面是我写的一个小程序,具体说明了类方法的用法:

#import <Foundation/Foundation.h>

// 声明

@interface Student : NSObject

{

    int _age;

    

}

+ (void)test1;//类方法

- (void)test1;//对象方法


@end


@implementation Student

- (void)test1

{

    NSLog(@"对象调用了我!");

}


+ (void)test1

{

    NSLog(@"类方法调用了我!");

}


@end


int main()

{

    [Student test1];// 类方法调用了我!

    Student *s = [Student new];

    [s test1];//对象调用了我

    return0;

}

二. self关键字 :

     1)谁调用了当前方法,self就代表谁

        self出现在对象方法中,self就代表对象

        self出现在类方法中,self就代表类

 

     2)在对象方法利用"self->成员变量名"访问当前对象内部的成员变量

     

     3)[self 方法名]可以调用其他对象方法\类方法


    指向的是方法调用者,代表当前的对象,注意体会下面的代码:

#import <Foundation/Foundation.h>

// 声明

@interface Student : NSObject

{

    int _age;

    

}

+ (void)test1;//类方法

- (void)test1;//对象方法


@end


@implementation Student

- (void)test1

{

    NSLog(@"对象调用了我!");

}


+ (void)test1

{

    NSLog(@"类方法调用了我!");

}


@end


int main()

{

    [Student test1];// 类方法调用了我!


    

    Student *s = [Student new];

    

    [s test1];// 对象调用了我


    

    return0;

}



//self的用法

#import <Foundation/Foundation.h>


@interface Person : NSObject

{

    int _age;

}


- (void)setAge:(int)age;

- (int)age;


- (void)test;


@end


@implementation Person

- (void)setAge:(int)age

{

    // _age = age;

    self->_age = age;

}

- (int)age

{

    returnself->_age;

}


- (void)test

{

    // self:指向了方向调用者,代表着当期对象

    int _age =20;

    NSLog(@"Person的年龄是%d",self->_age);

}


@end


int main()

{

    Person *p = [Person new];

    [p setAge:10];

    

    [p test];

    

    return0;

}

总结:

要注意类方法的使用场合,self以后会经常用到,认真体会其中的含义.