zoukankan      html  css  js  c++  java
  • 点语法

    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;
    }
  • 相关阅读:
    SQL Server SQLHelper帮助类
    Winform 常用的方法
    SQL Server 插入含有中文字符串出现乱码现象的解决办法
    ComboBox 中 DisplayMember 和 ValueMember 都是具体干什么的?
    HTML常用标签属性使用
    虚拟机安装windows server 2012 R2
    VS2017生成带图标的QT项目方法
    QSS 记录
    QT qss资源文件与代码分离
    pgsql 服务遇见的问题记录
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6544005.html
Copyright © 2011-2022 走看看