• 【学习笔记】【OC语言】self关键字


    1.成员变量和局部变量同名
    当成员变量和局部变量同名时,采取就近原则,访问的是局部变量
    用self访问成员变量,区分同名的局部变量

    2.使用细节
    出现的地方:所有的OC方法中(对象方法类方法),不能出现在函数
    作用
    使用 "self->成员变量名" 访问当前方法调用的成员变量
    使用 "[self 方法名];" 来调用方法(对象方法类方法)

    3.常见错误
    低级错误:用self去调用函数
    类方法中用self调用对象方法,对象方法中用self调用类方法
    self死循环

    4.代码

    1.

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Person : NSObject
     4 {
     5     int _age;
     6 }
     7 
     8 - (void)setAge:(int)age;
     9 - (int)age;
    10 
    11 - (void)test;
    12 
    13 @end
    14 
    15 @implementation Person
    16 - (void)setAge:(int)age
    17 {
    18     // _age = age;
    19     self->_age = age;
    20 }
    21 - (int)age
    22 {
    23     return self->_age;
    24 }
    25 
    26 - (void)test
    27 {
    28     // self:指向了方向调用者,代表着当期对象
    29     int _age = 20;
    30     NSLog(@"Person的年龄是%d岁", self->_age);
    31 }
    32 
    33 @end
    34 
    35 int main()
    36 {
    37     Person *p = [Person new];
    38     
    39     [p setAge:10];
    40     
    41     [p test];
    42     
    43     return 0;
    44 }

    2.

     1 #import <Foundation/Foundation.h>
     2 
     3 /*
     4  self的用途:
     5  1> 谁调用了当前方法,self就代表谁
     6  * self出现在对象方法中,self就代表对象
     7  * self出现在类方法中,self就代表类
     8  
     9  2> 在对象方法利用"self->成员变量名"访问当前对象内部的成员变量
    10  
    11  2> [self 方法名]可以调用其他对象方法类方法
    12  */
    13 
    14 @interface Dog : NSObject
    15 - (void)bark;
    16 - (void)run;
    17 @end
    18 
    19 @implementation Dog
    20 - (void)bark
    21 {
    22     NSLog(@"汪汪汪");
    23 }
    24 - (void)run
    25 {
    26     [self bark];
    27     //NSLog(@"汪汪汪");
    28     NSLog(@"跑跑跑");
    29 }
    30 @end
    31 
    32 int main()
    33 {
    34     Dog *d = [Dog new];
    35     
    36     [d run];
    37     
    38     return 0;
    39 }

    3.

     1 /*
     2  设计一个计算器类
     3  * 求和
     4  * 求平均值
     5  */
     6 
     7 #import <Foundation/Foundation.h>
     8 
     9 // 工具类:基本没有任何成员变量,里面的方法基本都是类方法
    10 @interface JiSusnQi : NSObject
    11 + (int)sumOfNum1:(int)num1 andNum2:(int)num2;
    12 
    13 + (int)averageOfNum1:(int)num1 andNum2:(int)num2;
    14 @end
    15 
    16 @implementation JiSusnQi
    17 + (int)sumOfNum1:(int)num1 andNum2:(int)num2
    18 {
    19     return num1 + num2;
    20 }
    21 
    22 + (int)averageOfNum1:(int)num1 andNum2:(int)num2
    23 {
    24     // 在这种情况下,self代表类
    25     int sum = [self sumOfNum1:num1 andNum2:num2];
    26     return sum / 2;
    27 }
    28 @end
    29 
    30 int main()
    31 {
    32     int a = [JiSusnQi averageOfNum1:10 andNum2:12];
    33     
    34     NSLog(@"a=%d", a);
    35     
    36 //    JiSusnQi *jsq = [JiSusnQi new];
    37 //    
    38 //    
    39 //    [jsq sumOfNum1:10 andNum2:13];
    40     
    41     return 0;
    42 }

    4.使用注意

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Person : NSObject
     4 - (void)test;
     5 + (void)test;
     6 
     7 - (void)test1;
     8 + (void)test2;
     9 
    10 
    11 - (void)haha1;
    12 
    13 + (void)haha2;
    14 
    15 
    16 @end
    17 
    18 @implementation Person
    19 - (void)test
    20 {
    21     NSLog(@"调用了-test方法");
    22     
    23     // 会引发死循环
    24     //[self test];
    25 }
    26 
    27 + (void)test
    28 {
    29     NSLog(@"调用了+test方法");
    30     
    31     // 会引发死循环
    32     //[self test];
    33 }
    34 
    35 - (void)test1
    36 {
    37     [self test]; // -test
    38 }
    39 
    40 + (void)test2
    41 {
    42     [self test]; // +test
    43 }
    44 
    45 - (void)haha1
    46 {
    47     NSLog(@"haha1-----");
    48 }
    49 
    50 
    51 void haha3()
    52 {
    53     
    54 }
    55 
    56 + (void)haha2
    57 {
    58     // haha3();
    59     [self haha3];
    60     // [self haha1];
    61 }
    62 @end
    63 
    64 int main()
    65 {
    66     [Person haha2];
    67     //Person *p = [Person new];
    68     
    69     //[p test1];
    70     return 0;
    71 }
     
  • 相关阅读:
    常见动态规划题目详解
    回溯法常见题目总结
    AWK语法入门
    JavaScript深拷贝—我遇到的应用场景
    git代码版本回退
    Rem实现移动端适配
    Weex了解
    Vue.js入门学习
    今日小结—304状态码,数组去重
    js今日小结—Ajax、前端安全、GET&POST、闭包、HTTPS
  • 原文地址:https://www.cnblogs.com/dssf/p/4646656.html
Copyright © 2020-2023  润新知