• OC中得那些“点”


    原文在此

    在OC中,当我们初学OC用到“.”时,你有没有疑惑过,它到底是setter?还是getter?,还是其它什么鬼东西。最近一个开始学OC的朋友问到过我这个问题,今天在这里总结一下,希望对诸位有用。

    1. C运算符

    由于OC是C语言的超集,完全兼容C语言,所以访问结构体和共用体的成员对象的“.”运算符,在OC项目中,我们也经常用到,譬如最最常见的取UI控件Frame的成员对象。

    C语言中“.”运算符的含义:成员选择(对象);用法:对象.成员名;

    与之相似,可以访问成员的运算符还有“->”运算符:成员选择(指针);用法:对象指针->成员名。

    两者都可以访问结构体成员,很容易混淆,我们通过一段代码对比两者之间的区别。

    以OC中得CGSize为例。

    //CGSize在OC中得定义如下
    struct CGSize {
        CGFloat width;
        CGFloat height;
    };
    typedef struct CGSize CGSize;
    // 通过两种运算符设置height
        struct CGSize size;
        struct CGSize *sp = &size;
        
        sp->height = 10;
        size.height = 10;
        (*sp).height = 10;
        (&size)->height= 10;
    

    通过上面代码,很容易分辨出两种运算符之间的区别:“.”通过地址偏移访问结构体成员,“->”是通过指针访问结构体成员。OC作为面向对象的语言,不需要开发者过多关注数据存储的地址,所以在OC中,基本使用“.”运算符来访问结构体成员。

    2. setter和getter方法

    OC中最常用的点语法,其本质就是隐式的调用对象属性的setter和getter方法,这是学习OC需要掌握的基本知识,使用时注意setter和getter中self的循环调用问题。具体讲解可以参考下面这位博主的文章,这里不再赘述。

    点这里:OC点语法

    3. 链式语法

    可以通过点语法调用,只有返回值,没有传入参数的对象方法和类方法。
    这种语法很少使用,在使用时,通常没有方法名提示,比较容易出错,并不推荐使用。
    下面,让我们建一个IOS工程,通过一段简单的代码看一下如何使用。

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        NSInteger num = 0;
        
        self.test0;
        num = self.test1;
        ViewController.test2;
        num = ViewController.test3;
    }
    
    - (void)test0 { 
        NSLog(@"test0");
    }
    
    - (NSInteger)test1 {
        NSLog(@"test1");
        return 10;
    }
    
    + (void)test2 {
        NSLog(@"test2");
    }
    
    + (NSInteger)test3 { 
        NSLog(@"test3");
        return 20;
    }
    
    @end
    

    运行结果如下:

    当返回值为空时,使用该语法,Xcode会报警告,如下图

    但并不影响程序的正常运行输出。

  • 相关阅读:
    NOIP模拟测试17
    C++11下的关键字
    Tyvj 1518 CPU监控(线段树)
    单身三连之三
    论求解线性方程
    单身三连之二
    单身三连之一
    20190719总结
    卡常
    论突变为零(不定更新)
  • 原文地址:https://www.cnblogs.com/xishuidongliu/p/5028859.html
Copyright © 2020-2023  润新知