2018-06-01

2018-06-01  本文已影响9人  可爱的33

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,信号量 锁

未完待续

上一篇下一篇

猜你喜欢

热点阅读