扩展5—关于Objective-C type encoding

2020-10-28  本文已影响0人  L_Ares

本文为L_Ares个人写作,以任何形式转载请表明原文出处。

关于什么是type encoding,先往下看,看完了就知道了。

一、准备工作

先随便建一个可以在mac上跑的commond line tool

图1.png

然后就在main.m中随意的建一个类,我继承于了NSObject,大家可以随意,这不是重点。然后在main.m中我初始化一个JDPerson的实例对象。

#import <Foundation/Foundation.h>


@interface JDPerson : NSObject

@property (nonatomic,copy) NSString *jd_name;

@property (nonatomic,assign) int jd_age;

- (NSString *)study:(NSString *)something;

@end

@implementation JDPerson

- (NSString *)study:(NSString *)something
{
    return something;
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        
        JDPerson *person = [[JDPerson alloc] init];
        
        [person study:@"objc"];
        
        
        NSLog(@"Hello, World!");
    }
    return 0;
}

二、Clang编译成.cpp

进入到当前的typeEncodes项目main.m 所在的文件夹下。执行以下命令 :

clang -rewrite-objc main.m -o main.cpp

然后进到main.m所在的文件夹下,会发现多处了main.cpp的文件,打开它,搜索你自定的方法study,你会找到一个_method_list_t方法列表。

结果如下图所示 :

图2.png

看我画黄框的地方,这个东西就是本节要说的type encoding,类型编码。

三、举例说明

其实这个在苹果的开发者官网是有的,这里是Objective-C type encoding官网,有兴趣的可以自己看,我就举个例子说一下,这些符号都是什么。

因为会有一些地方要用到,所以在这里扩展记录。

我就以图2中画黄框的那个来举例,里面包含了返回值,包含了参数,算是比较全一点的。

1. type Encoding

type Encoding的图 :

图3.png

2. Property Type

还有一个Property Type_prop_list_t里面。

拿图3中举例

图3.png

再上一个Apple Developer官网的图 :

图4.png
上一篇 下一篇

猜你喜欢

热点阅读