zoukankan      html  css  js  c++  java
  • Objective-C中,类方法的getter和setter可以用点运算符吗?

    Objective-C中,对象实例property的getter和setter可以使用点运算符来操作,那么类方法的getter和setter可以使用点运算吗?

    答案是肯定的。

    看如下代码:

    #import <Foundation/Foundation.h>
    
    static int i = 0;
    
    @interface X : NSObject
    
    + (int)i;
    + (void)setI:(int)ii;
    
    @end
    
    
    @implementation X 
    
    + (int)i {
        return i;
    }
    
    + (void)setI:(int)ii {
        i = ii;
    }
    
    
    @end
    
    
    int main() {
        X.i;
        X.i= 1;
    }

    类X有对静态变量i操作的getter和setter类方法,使用clang -rewrite-objc命令将代码重写为c++查看:

    int main() {
     ((int (*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("X"), sel_registerName("i"));
     ((void (*)(id, SEL, int))(void *)objc_msgSend)((id)objc_getClass("X"), sel_registerName("setI:"), 1);
    }

    通过代码可以发现,main函数里面对静态setter和getter方法的调用,最终也是转换成了objc_msgSend的调用;并且对i进行设值得方法,最终转换成了调用setI方法。

  • 相关阅读:
    Sublime Text3安装包管理
    Ubuntu下的Sun Java的安装与配置
    求最大面积--------O(n)复杂度
    求最大面积
    gas stations
    n皇后问题
    Triangle --- 至顶向下求最小值
    First Missing Positive
    常见的几种单例模式
    分布式锁学习笔记
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/9656465.html
Copyright © 2011-2022 走看看