• Objective-C 【点语法】


    ———————————————————————————————————————————
    点语法的使用

    //
    //  点语法的使用
    //
    //  点语法:   xcode的一种特性,xcode帮我们做代码替换
    //  点语法的格式:   对象.属性名
    //

    一段代码:

    #import <Foundation/Foundation.h>

    @interface Person : NSObject
    {
        NSString *_name;
        int _age;
    }
    -(void)setName:(NSString *)name;
    -(NSString *)name;

    -(void)setAge:(int)age;
    -(int)age;
    @end

    #import "Person.h"

    @implementation Person
    -(void)setName:(NSString *)name
    {
        NSLog(@"这是name的set方法!");
        _name=name;
    }
    -(NSString *)name
    {
        NSLog(@"这是name的get方法!");
        return _name;
    }

    -(void)setAge:(int)age
    {
        NSLog(@"这是age的set方法!");
        _age=age;
    }
    -(int)age
    {
        NSLog(@"这是age的get方法!");
        return _age;
    }
    @end

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            Person *p=[Person new];
    //        先用普通的方法去调用set和get方法,我们在set和get方法中加入了一行输出语句,来判断是否被调用
    //        [p setName:@"Wang"];
    //        [p setAge:18];
    //        
    //        [p name];
    //        [p age];
            
    //        再使用点方法
    //        p.name=@"Wang";
    //        p.age=18;
    //        
    //        NSString *a=p.name;
    //        int b=p.age;
    //        显然点方法也同样的调用了set和get方法,和上面的语句作用是一致的
    //        但是,需要注意的是,此时的点方法(p.age和p.age=18)并不是直接访问实例变量,并不是看到p.age=18;就是给age赋值,而是Xcode看到点语法的语句后,自动帮我们替换成:
    //        p.age=18; ————替换成————> [p setAge:18];
    //        p.age; ————替换成————> [p age];

    //        那么问题来了,我们调用set方法和get方法的点语法十分的相似,都是p.age,那么系统是怎么区分的呢?
    //        显然,系统有自己的区分机制。一般而言,p.age出现在等号左侧就代表替换成set方法,p.age出现在等号右侧就替换成get方法。
    //        当然这是一般情况,如果是 NSLog(@"%d",p.age); 的话,没有等号,怎么办呢?所以,其真正的原理是:如果 设置值(写),那么就替换成set方法;如果 取值(读),那么就替换成get方法。
        }
        return 0;
    }


    ———————————————————————————————————————————
    点语法的注意事项

    注意:

    ①我们可以看到,上一段我们介绍的点语法,都是   实例对象名.属性名   的形式去调用的。
    那么看下面的一段代码:

    -(void)setAge:(int)age
    {
    self.age=age;
    }

    ★self表示当前对象,然后用当前对象调用点语法,去写这个set方法,这样显然是错误的!!!

    上面的代码相当于:

    -(void)setAge:(int)age
    {
        [self setAge:age];   //死循环
    }

    ★我们一定要记住,点语法不是直接去访问实例变量,而是Xcode的一种替换代码的手段,本质上是方法的调用,使用点语法的时候,编译器会自动将点语法展开成相应的set、get方法。上面是一个设置值的语句,所以点语法表示的是调用set方法。这样说来,你在set方法里面再调用set方法,不就是死循环了么!!!

    ②还是强调一下点语法的本质,点语法的本质是转换成相应的set、get方法,如果没有set、get方法,这不能使用点语法。所以使用点语法之前要先写set/get方法。


    ———————————————————————————————————————————

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    常用cmd命令总结
    百度地图api的简单应用(二):轻量级路径规划
    百度地图api的简单应用(一):POI检索
    R语言-八皇后问题
    8086基本IO口的仿真
    输入输出与中断
    汇编语言例子
    变量标号
    变量声明
    串操作指令2
  • 原文地址:https://www.cnblogs.com/wzy294250051/p/4787892.html
Copyright © 2020-2023  润新知