2018-06-01
堆:一棵树,程序员申请和释放的,在运行时才创建(一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。其类似于链表。)
栈(堆栈):一个桶,先进后出,系统管理的(由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。)
代码区(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,信号量 锁
未完待续