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方法。

posted @   chaoguo1234  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示