美文网首页
2018-06-01

2018-06-01

作者: 可爱的33 | 来源:发表于2018-06-01 15:27 被阅读9次

    1,堆栈的区别
    https://mp.weixin.qq.com/s?__biz=MzA3NzM0NzkxMQ==&mid=2655359821&idx=1&sn=5691c3be33c310a5914fec21cd4f0749&chksm=84e25e65b395d773e84428e6d27fe82ef4b8f7af9326ad8f694a8ee412db0c1ae684f774bee9&scene=38#wechat_redirect

    堆:一棵树,程序员申请和释放的,在运行时才创建(一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。其类似于链表。)

    栈(堆栈):一个桶,先进后出,系统管理的(由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。)

    代码区(text segment ):是应用程序运行时应用程序代码存在的内存段,运行前就已经确定(编译时确定),通常为只读的。代码区的指令中包括操作码和要操作的对象(或对象地址引用),代码区指令根据程序设计流程依次执行,每一个指令,每一个单个函数、过程、方法和执行代码都存在这个内存段中直到应用程序退出。一般使用中很少涉及。

    栈(Stack):当我们创建一个值类型,如结构体,系统将其存储在一个被称为栈的内存区域中,是由CPU直接管理和优化的。当一个函数声明一个变量,变量将存储在栈中,当函数调用完毕后栈会自动释放该变量。因此栈是非常易于管理的、有效的,由于是CPU直接控制,速度非常快。

    堆(Heap):当我们创建了一个引用类型,如类,系统将把类实例存储在一个被称为堆的内存区域中。系统使用堆来存储其他对象引用的数据。堆是一个大的内存池,系统可以从该池中请求并动态分配内存块。堆不会像栈一样自动释放对象,需要额外的工作来完成。这使得在堆中创建和删除数据比栈慢。

    2,多线程 gcd

    3,第三方库的理解

    4,加密 数据安全算法

    5,sdk

    6,静态库 动态库

    7,指令集

    8,bitcode

    9,打包

    10,调试框命令

    11,runtime
    可以动态的增加属性,方法,实例变量,获取实例列表,方法列表,属性列表,方法的实现要先写上实现,不然没法加
    `
    //动态的创建类

    Class myClass = objc_allocateClassPair(NSObject.class, "MyObject", 0);
    //增加实例变量
    class_addIvar(myClass, "nameX", sizeof(NSString *), 0, "@");
    //增加方法
    class_addMethod(myClass, @selector(addMethodSelector:), (IMP)addMethodSelector, "V@:");`
    

    12,runloop

    13,kvo

    14,instrument

    15,错误日志的抓取

    16,优化
    17,信号量 锁

    未完待续

    相关文章

      网友评论

          本文标题:2018-06-01

          本文链接:https://www.haomeiwen.com/subject/qgkksftx.html