Runtime类型编码(Type Encoding)

①动态添加一个新类,并且给这个新类添加一个UIView的实例对象,然后打印出Type Encoding

    // 创建一个新类
    Class newClass = objc_allocateClassPair([NSObject class], "newClass", 0);
    // 给类添加实例变量
    class_addIvar(newClass, "_varA", sizeof(UIView *), log2(sizeof(UIView *)), @encode(UIView *));
    // 在应用中注册新类
    objc_registerClassPair(newClass);

    // 获取实例变量
    Ivar var_Instance = class_getInstanceVariable([newClass class], "_varA");
    // 获取成员变量名
    const char *name_var = ivar_getName(var_Instance);
    // 获取成员变量类型编码
    const char *type_var = ivar_getTypeEncoding(var_Instance);
    // 获取成员变量的内存偏移量
    ptrdiff_t offset_var = ivar_getOffset(var_Instance);
    
    NSLog(@"Ivar Name:%@ TypeEncoding:%s Offset:%td",[NSString stringWithUTF8String:name_var],type_var,offset_var);

运行结果:

Ivar Name:_varA TypeEncoding:@ Offset:8

②获取系统自带的类UIViewController里的成员变量_view,然后打印出Type Encoding

    // 获取实例变量
    Ivar var_Instance2 = class_getInstanceVariable([UIViewController class], "_view");
    // 获取成员变量名
    const char *name_var2 = ivar_getName(var_Instance2);
    // 获取成员变量类型编码
    const char *type_var2 = ivar_getTypeEncoding(var_Instance2);
    // 获取成员变量的内存偏移量
    ptrdiff_t offset_var2 = ivar_getOffset(var_Instance2);
    
    NSLog(@"Ivar Name:%@ TypeEncoding:%s Offset:%td",[NSString stringWithUTF8String:name_var2],type_var2,offset_var2);

运行结果:

Ivar Name:_view TypeEncoding:@"UIView" Offset:24

为什么①和②中,同样都是UIView的实例对象,打印的TypeEncoding不同呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,741评论 33 466
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 6,605评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,980评论 19 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,396评论 30 472
  • 对于绝大多数的小众app来说,社交是不足以吸引用户去下载的,但奇怪的是,现在国内市场上的app,无论大小都号称要做...
    春困秋乏的睡眠君阅读 4,330评论 6 7

友情链接更多精彩内容