zoukankan      html  css  js  c++  java
  • 05-self关键字

    1、self关键字的用途

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

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

        b、self出现在类方法中,self就代表类(类名)

      self的本质是指针,指向了方法调用者, 代表着当前对象或者当前类, 谁调用当前方法就指向谁。

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

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

     1 #import <Foundation/Foundation.h>
     2 //类的声明 Person类
     3 @interface Person : NSObject
     4 - (void)run;//
     5 - (void)eat;//
     6 @end
     7 
     8 //类的实现(方法实现)
     9 @implementation Person
    10 - (void)run
    11 {
    12     NSLog(@"人在跑");
    13 }
    14 
    15 - (void)eat
    16 {
    17     //self在对象方法中,代表对象
    18     //self调用了run方法
    19     [self run];
    20     NSLog(@"人在吃");
    21 }
    22 @end
    23 
    24 int main(int argc, const char * argv[])
    25 {
    26     //创建一个对象
    27     Person *person1 = [Person new];
    28     [person1 run];
    29     [person1 eat];
    30     return 0;
    31 }

     2、成员变量和局部变量同名

      1> 当成员变量和局部变量同名时,采取就近原则,访问的是局部变量

      2> 用self访问成员变量,区分同名的局部变量

    3、使用细节

      (1)出现的地方:所有OC方法中(对象方法/类方法),不能出现在函数

        (2)作用

        1>使用"self ->成员变量名" 访问当前方法调用的成员变量

        2>使用"[self 方法名]",来调用方法(对象方法/类方法)

     4、常见错误

      (1) 低级错误:用self去调用函数

      (2) 类方法中用self调用对象方法;对象方法中用self调用类方法 

      (3) self死循环

    5、练习

    (1)狗在跑之前叫两声

     1 /*
     2  狗在跑之前叫两声
     3 */
     4 
     5 #import <Foundation/Foundation.h>
     6 
     7 @interface Dog : NSObject
     8 
     9 - (void)bark;
    10 - (void)run;
    11 @end
    12 
    13 @implementation Dog
    14 - (void)bark
    15 {
    16     NSLog(@"汪汪汪!");
    17 }
    18 - (void)run
    19 {
    20     //对象方法里面,self代表的是对象
    21     [self bark];
    22     NSLog(@"跑跑跑!");
    23 }
    24 @end
    25 
    26 int main(int argc, const char * argv[])
    27 {
    28     Dog *dog1 = [Dog new];
    29     [dog1 run];
    30     return 0;
    31 }

    (2)计算器类,计算平均值(调用求和方法)

     1 /*
     2 计算器类,计算平均值(调用求和方法)
     3 */
     4 #import <Foundation/Foundation.h>
     5 @interface Calculator :NSObject
     6 + (int)sumOfNum1: (int)num1 andNum2: (int)num2;
     7 + (int)averageOfNum1: (int)num1 andNum2:(int)num2;
     8 @end
     9 
    10 @implementation Calculator
    11 + (int)sumOfNum1: (int)num1 andNum2: (int)num2
    12 {
    13     return num1 + num2;
    14 }
    15 
    16 + (int)averageOfNum1: (int)num1 andNum2: (int)num2
    17 {
    18     //self在类方法中,它代表的是类Calculator
    19     //self调用类方法
    20     int s = [self sumOfNum1:(int)num1 andNum2:(int)num2];
    21     return s/2;
    22 }
    23 @end
    24 
    25 int main(int argc, const char * argv[])
    26 {
    27     int aver = [Calculator averageOfNum1:10 andNum2:30];
    28     NSLog(@"平均值为%i",aver);
    29     return 0;
    30 }

    (3)设计Car类,一个对象方法跟其他车子比较车速,返回速度差,一个类方法比较两辆车的车速,返回速度差

     1 /*
     2 设计Car类,一个对象方法跟其他车子比较车速,返回速度差,一个类方法比较两辆车的车速,返回速度差
     3  */
     4 #import <Foundation/Foundation.h>
     5 @interface Car : NSObject
     6 {
     7     int _speed;
     8 }
     9 - (void)setSpeed:(int)speed;
    10 - (int)speed;
    11 
    12 - (int)compareSpeedWithOtherCar:(Car *)car2;
    13 + (int)compareSpeedBetwwenCar1:(Car *)car1 andCar2: (Car *)car2;
    14 @end
    15 
    16 @implementation Car
    17 - (void)setSpeed:(int)speed
    18 {
    19     _speed = speed;
    20 }
    21 - (int)speed
    22 {
    23     return _speed;
    24 }
    25 
    26 - (int)compareSpeedWithOtherCar:(Car *)car2
    27 {
    28     return _speed - car2 ->_speed;
    29 }
    30 + (int)compareSpeedBetwwenCar1:(Car *)car1 andCar2: (Car *)car2
    31 {
    32     
    33     return car1->_speed - car2 ->_speed;
    34 }
    35 @end
    36 
    37 int main()
    38 {
    39     Car *car1 = [Car new];
    40     Car *car2 = [Car new];
    41     [car1 setSpeed:100];
    42     [car2 setSpeed:120];
    43     int s = [car2 compareSpeedWithOtherCar:car1];
    44     int s1 = [Car compareSpeedBetwwenCar1:car1 andCar2: car2];
    45     NSLog(@"对象方法:速度差为%i",s);
    46     NSLog(@"类方法:速度差为%i",s1);
    47     return 0;
    48 }
    人生之路,不忘初心,勿忘始终!
  • 相关阅读:
    linux-cp
    linux-rmdir
    linux-tail
    linux-head
    linux 重定向
    hadoop环境安装及错误总结
    vim 图册
    为什么可以这么快! awk 与python的应用
    八大排序算法的 Python 实现
    linux的文件隐藏属性 chattr lsattr
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/3997976.html
Copyright © 2011-2022 走看看