• 点语法


    1.点语法基本使用

    2.点语法的本质

    • 其实点语法的本质还是方法调用
    • 当使用点语法时,编译器会自动展开成相应的方法

    • 当点语法使用在 “=“赋值符号左侧的时候,点语法会被展开为setter方法的调用,其他情况(等号右侧、直接使用)为点语法展开为getter方法的调用

    3.点语法注意

    • 点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法调用。

    • 切记点语法的本质是转换成相应的对setter和getter方法调用,如果没有set和get方法,则不能使用点语法。

    • 不要在getter 与 setter方法中使用本属性的点语法

    - (void) setAge:(int)age {
        // 下面的代码会引发死循环
        self.age = age;
            //编译器展开后 [self setAge:age]
    }
    
    
    - (int) age {
        // 下面的代码会引发死循环
        return self.age;
              // 编译器展开后 [self   age]
    }

    代码示例:

    //  Person.h
    
    
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    {
    //    @public
        int _age;
        NSString *_name;
        double _height;
    }
    
    - (void)setAge:(int)age;
    - (void)setName:(NSString *)name;
    - (void)setHeight:(double)height;
    
    - (int)age;
    - (double)height;
    - (NSString *)name;
    
    - (void)test;
    
    @end
    //  Person.m
    
    
    #import "Person.h"
    
    @implementation Person
    
    - (void)setAge:(int)age
    {
        _age = age;
    }
    
    - (void)setHeight:(double)height
    {
        _height = height;
    }
    
    - (void)setName:(NSString *)name
    {
        _name = name;
    }
    
    - (int)age
    {
        return _age;
    }
    
    - (double)height
    {
        return _height;
    }
    
    - (NSString *)name
    {
        return _name;
    }
    
    - (void)test
    {
        NSLog(@"test");
    }
    @end
    //  main.m
    
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
        
        Person *p = [Person new];
        /*
        p->_age = 30;
        p->_name = @"lnj";
        p->_height = 1.75;
        
        NSLog(@"age = %i, name = %@, height = %f", p->_age, p->_name, p->_height);
         */
        
        /*
        [p setName:@"lnj"];
        [p setAge:30];
        [p setHeight:1.75];
        NSLog(@"age = %i, name = %@, height = %f", [p age], [p name], [p height]);
         */
        
        // 如果给属性提供了getter和setter方法, 那么访问属性就又多了一种访问方式 , 点语法
        // 点语法其实它的本质是调用了我们的setter和getter方法
        // 点语法是一个编译器的特性, 会在程序翻译成二进制的时候将.语法自动转换为setter和getter方法
        // 如果点语法在=号的左边, 那么编译器会自动转换为setter方法
        // 如果点语法在=号的右边, 或者没有等号, 那么编译器就会自动转换为getter方法
        p.name = @"lnj";
    //  [p setName:@"lnj"];
        p.age = 30;
        p.height = 1.75;
        NSLog(@"age = %i, name = %@, height = %f", p.age, p.name, p.height);
    //     p.age
    //    [p age];
        
        /*
         点语法的注意点:
         点语法一般用于给成员变量赋值, 如果不是给成员变量赋值一般情况下不建议使用, 但是也可以使用
         
         */
        p.test; // [p test];
        return 0;
    }
  • 相关阅读:
    shell脚本中执行python脚本并接收其返回值的例子
    linux查找所有文件中某个字符串
    Shell脚本中单引号(‘)和双引号(“)的使用区别
    第一个shell脚本
    shell 比较符号
    source ~/.bash_profile是什么意思
    bash shell:获取当前脚本的绝对路径(pwd/readlink)
    poj 3307 Smart Sister 打表解因子生成数问题
    Python将JSON格式数据转换为SQL语句以便导入MySQL数据库
    UISegmentedControl的具体使用
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6544005.html
Copyright © 2020-2023  润新知