zoukankan      html  css  js  c++  java
  • runtime~点滴

    类对象是一个常驻内存的单例对象~,用来创造实例对象~

    另外,类对象中的IVar也是唯一的

    通过下面代码的打印结果可以看出,通过class_copyIvarList方法打印出来的Ivar变量地址是对应的,也就是说,虽然方法名里面有copy,其实也是同一份Ivar

    unsigned int varsCount;
        
        Ivar *vars = class_copyIvarList([GitHubRepoModel class], &varsCount);;
        
        for (int i = 0; i < varsCount; i++) {
            Ivar var = vars[i];
            NSLog(@"+++%p",var);
        }
        
        
        
        Ivar *vars1 = class_copyIvarList([GitHubRepoModel class], &varsCount);;
        
        for (int i = 0; i < varsCount; i++) {
            Ivar var = vars1[i];
            NSLog(@"%p",var);
        }

    利用这个特性和objc_setAssociatedObject方法,可以将一些程序运行期间非常常用的变量常驻内存~这样可以很大的提升程序效率~

    另外使用objc_setAssociatedObject方法的时候,尤其是结合上面的运行时特性使用的时候,有两种很常见的设置key的变量

    1 ----  static const char CachedIvarsKey;    只定义一个变量,不要赋值~,这样可以省内存~指向/0

    2 ----  使用Ivar等这些只存在一份的变量作为key~

    有兴趣的可以看下MJExtension~~~~~性能测试犹豫JsonModel等其他工具,立面设计的缓存系统对性能起到了很大的优化~

  • 相关阅读:
    二维码生成库phpqrcode使用小结
    微信扫码支付开发小结
    Xcode下开发c静态库for ios CPU架构 静态库合并
    Android.mk的用法和基础
    Android.mk介绍
    查看与修改网关,DNS
    WebRTC编译系统之GYP,gn和ninja
    sed awk文本处理教程
    有哪些自媒体平台?
    camke使用例程
  • 原文地址:https://www.cnblogs.com/xyzaijing/p/4288396.html
Copyright © 2011-2022 走看看