前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OC底层探索14-方法名Type EncodingsOC底层探索14-方法名Type Encodings

OC底层探索14-方法名Type EncodingsOC底层探索14-方法名Type Encodings

作者头像
用户8893176
发布2021-08-09 11:14:43
3190
发布2021-08-09 11:14:43
举报
文章被收录于专栏:小黑娃Henry

在对cpp文件进行查看的时候,发现有一些特殊的符号很是常见,像这样的方法Sel-"v16@0:8"到底代表什么意义,这次决定把它搞搞清楚到底是什么。

查看Clang编译文件(.cpp)
代码语言:javascript
复制
//Clang默认依赖Foundation库
//当前目录下:把目标文件编译成c++文件.pp
clang -rewrite-objc main.m -o main.cpp

//编译目标文件内有UIKit等其他库需要导入依赖,
clang -rewrite-objc -fobjc-arc -fobjc-runtime=ios-13.0.0 -isysroot / Applications/Xcode.app/Contents/Developer/Platforms/ iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.0.sdk main.m

//使用`xcode`安装安装的`xcrun`命令
xcrun -sdk iphonesimulator clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp

xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main- arm64.cpp (真机)

cpp文件

  • 通过观察发现是方法sel的一种简式表达,但是具体是代表什么呢?

Type Encodings

  • 这是在appleDevelop官网上找到的。
  • 除了这种方式还可以通过@encode(##),内建函数来获取各个类型的Encodings。

具体意义

  • 方法会自带两个参数:self、方法名(cmd);
  • 例一
代码语言:javascript
复制
-(void)say1{}   //oc

{(struct objc_selector *)"say1", "v16@0:8", (void *)_I_HRTest_say1} //cpp

v:返回值为空 16:共占用16字节内存空间 @:代表第一个参数self(每一个方法都会有一个默认参数self) 0:第一个参数从第0号位置开始 : :方法的Sel(方法名) 8:SEL从第8号位置开始


  • 例二,系统生成的get方法
代码语言:javascript
复制
{(struct objc_selector *)"name", "@16@0:8", (void *)_I_HRTest_name} //cpp

第一个@:返回值为id类型 16:共占用16字节内存空间 第二个@:代表第一个参数self(每一个方法都会有一个默认参数self) 0:第一个参数从第0号位置开始 : :方法的Sel(方法名) 8:SEL从第8号位置开始


  • 例三,系统生成的set方法
代码语言:javascript
复制
{(struct objc_selector *)"setAge:", "v20@0:8i16", (void *)_I_HRTest_setAge_} //cpp

v:返回值为空 20:共占用20字节内存空间 @:代表第一个参数是id类型-self(每一个方法都会有一个默认参数self) 0:第一个参数从第0号位置开始 : :方法的Sel(方法名) 8:SEL从第8号位置开始 i:第二个参数是int类型,代表传入参数 16:第二个参数从16号位置开始-20号位置,共占4个字节

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/6/11 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查看Clang编译文件(.cpp)
  • cpp文件
  • Type Encodings
  • 具体意义
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档