美文网首页
类方法跟self关键字

类方法跟self关键字

作者: AmberAlbee | 来源:发表于2019-03-12 03:57 被阅读0次

    main.m

    #import <Foundation/Foundation.h>

    #import "Person.h"

    #import "Calculator.h"

    #import "Car.h"

    #import "Dog.h"

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

    {

    Person *p = [Person new];

    [p run];

    [Person run];

    //  [Person print];

    [p setAge:18];

    [p age];

    int a = [Calculator sumofNum1:52 andNum2:55];

    NSLog(@"a = %d",a);

    int b = [Calculator aveofNum1:66 andNum2:55];

    NSLog(@"b = %d",b);

    Car *c = [Car new];

    [c setSpeed:50];

    [c speed];

    [c test];

    [Car test];

    Dog *d = [Dog new];

    [d run];

    //  [d bark];

    return 0;

    }


    /* 

    类方法:

    1>只能以加号开头

    2>类方法只能由类调用

    3>类方法不能访问成员变量

    对象方法:

    1>以减号开头

    2>对象方法只能由对象调用

    3>可以访问成员变量

    类方法的好处与使用的场合

    1>不依赖对象,执行效率比对象方法高(能用类方法尽量用类方法)

    2>场合:不需要成员变量时,都使用类方法(工具类)

    注意:对象方法和类方法可以同名,可以同时存在

    */

    Person.h

    #import <Foundation/Foundation.h>

    @interface Person : NSObject

    {

    int _age;

    }

    - (void)run;

    + (void)run;

    + (void)print

    {

    NSLog(@"%d对象方法",_age);

    }

    - (void)setAge:(int)age;

    - (int)age;

    @end


    Person.m

    #import <Person.h>

    @implementation Person

    - (void)run

    {

    //  NSLog(@"%d类方法",_age);

    //  报错,在类方法中不能访问成员变量

    NSLog(@"调用了-run方法");

    //  [self run];  //  死循环

    [Person run];  //  在对象方法中可以调用类方法,在类方法中不可以调用对象方法(类方法中没有对象)

    }

    + (void)run

    {

    NSLog(@"调用了+run方法");

    //  [Person run];  //  死循环

    }

    - (void)setAge:(int)age

    {

    _age = age;

    }

    - (int)age

    {

    return _age;

    }

    @end


    /*

    计算器类:

    求和

    求平均值

    */

    Calculator.h

    #import <Foundation/Foundation.h>

    @interface Calculator : NSObject

    + (int)sumofNum1:(int)num1 andNum2:(int)num2;

    + (int)aveofNum1:(int)num1 andNum2:(int)num2;

    @end


    Calculator.m

    #import <Calculator.h>

    @implementation Calculator

    + (int)sumofNum1:(int)num1 andNum2:(int)num2

    {

    return num1 + num2;

    }

    + (int)aveofNum1:(int)num1 andNum2:(int)num2;

    //  self  当前类

    int sum = [self sumofNum1:num1 andNum2:num2];

    return sum/2;

    //  int sum = [Calculator sumofNum1:num1 andNum2:num2];

    return sum/2;

    //  return (num1 +num2)/2;

    @end


    //  self关键字

    /*

    self关键字的用途

    1>self关键字可以用来访问成员变量

    2>调用当前的方法,self代表谁

    1>>self出现在对象方法中:代表当前对象

    2>>self出现在类方法中:代表当前类

    调用方法的格式:[self 方法名];

    */

    Car.h

    #import <Foundation/Foundation.h>

    @interface Car : NSObject

    {

    int _speed;

    }

    - (void)setSpeed:(int)speed;

    - (int)speed;

    - (void)test;

    + (void)test;

    - (void)test1;

    + (void)test2;

    @end


    Car.m

    #import <Car.h>

    @implementation Car

    - (void)setSpeed:(int)speed

    {

    _speed = speed;

    }

    - (void)speed

    {

    return _speed;

    }

    //  - (void)test

    //  {

    //  int _speed = 40;  //  不知道_speed是谁

    // NSLog(@"speed=%d",self->_speed);

    //  NSLog(@"speed=%d",[self speed]);  //  使用get方法

    //  }

    - (void)test

    {

    NSLog(@"调用了-test方法");

    //  [self test];  //  死循环

    //  [Car test];

    }

    + (void)test

    {

    NSLog(@"调用了+test方法");

    //  [self test];  //  死循环

    }

    - (void)test1

    {

    NSLog(@"abcd");

    }

    + (void)test2

    {

    NSLog(@"1234");

    }

    @end


    Dog.h

    #import <Foundation/Foundation.h>

    @interface Dog : NSObject

    - (void)bark;

    - (void)run;

    @end


    Dog.m

    #import <Dog.h>

    @implementation Dog

    - (void)bark

    {

    NSLog(@"汪汪汪");

    }

    - (void)run

    {

    //  NSLog(@"汪汪汪");

    //  self  代表当前对象

    [self bark];

    NSLog(@"跑跑跑");

    }

    @end


    相关文章

      网友评论

          本文标题:类方法跟self关键字

          本文链接:https://www.haomeiwen.com/subject/ztuwpqtx.html