美文网首页将来跳槽用
重学iOS——3.点语法

重学iOS——3.点语法

作者: Peak_One | 来源:发表于2017-10-17 23:46 被阅读48次

    点语法本来是不需要介绍的,但是还是需要拿出来一点进行强调:点语法的本质是编译器对于setter或者getter方法的完全替换。具体代码如下:
    Person.h

    //
    //  Person.h
    //  OC_day3_点语法
    //
    //  Created by 刘旭辉 on 2017/10/17.
    //  Copyright © 2017年 刘旭辉. All rights reserved.
    //
    
    #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;
    -(NSString *)name;
    -(double)height;
    
    -(void)test;
    @end
    

    Person.m

    //
    //  Person.m
    //  OC_day3_点语法
    //
    //  Created by 刘旭辉 on 2017/10/17.
    //  Copyright © 2017年 刘旭辉. All rights reserved.
    //
    
    #import "Person.h"
    
    @implementation Person
    
    -(void)setAge:(int)age
    {
        _age=age;
    }
    -(void)setName:(NSString *)name
    {
        _name=name;
    }
    -(void)setHeight:(double)height
    {
        _height=height;
    }
    
    -(int)age
    {
        return _age;
    }
    -(NSString *)name
    {
        return _name;
    }
    -(double)height
    {
        return _height;
    }
    -(void)test
    {
        NSLog(@"test");
    }
    @end
    

    mian.m

    //
    //  main.m
    //  OC_day3_点语法
    //
    //  Created by 刘旭辉 on 2017/10/17.
    //  Copyright © 2017年 刘旭辉. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    int main(int argc, const char * argv[]) {
        Person *p=[Person new];
    //    p->_age=25;
    //    p->_name=@"lxh";
    //    p->_height=1.70;
    //    NSLog(@"age=%i,name=%@,height=%f",p->_age,p->_name,p->_height);
        
    //    [p setHeight:1.70];
    //    [p setName:@"lxh"];
    //    [p setAge:25];
    //    NSLog(@"name=%@,age=%i,height=%f",[p name],[p age],[p height]);
        
        //点语法,实际是调用了setter和getter方法,但是点语法不是一个编译器的特性,会在程序翻译成二进制的时候将语法自动转换为setter和getter方法
        //如果点语法在等号的左边,系统会自动转换成setter方法
        //如果点语法在等号的右边,或者没有等号,那么编译器就会自动转换为getter方法
        
        //点语法的注意点:
        //点语法一般用于给成员变量赋值,如果不是给成员变量赋值一般情况下不建议使用,但是也可以使用
        p.name=@"lxh";
        p.age=25;
        p.height=1.70;
        NSLog(@"name=%@,age=%i,height=%f",p.name,p.age,p.height);
        
        //###注意此处调用
        p.test;//这个方法被调用了,但是不是getter方法,因为点语法是一种格式替换,见到点语法,就替换成[p test]或者[p setTest:test];所以这种方式被触发了
        return 0;
    }
    

    欢迎关注我的个人微信公众号,免费送计算机各种最新视频资源!你想象不到的精彩!


    0.jpg

    相关文章

      网友评论

        本文标题:重学iOS——3.点语法

        本文链接:https://www.haomeiwen.com/subject/emojuxtx.html