堆:数据结构类型自下而上。
栈:数据结构类型自上而下。
我们常看到的Objc变量本质上是一个指针,指向一个对象,对象的本质是一个结构体,可以通过ARC来管理。
- 结构体存放在堆里,通过malloc函数开辟堆空间,会返回一个地址,让变量去接收。如果通过MRC释放了指针,不通过free函数(传递的参数是内容返回的指针)释放结构体的话,结构体会一直存放在堆空间中,就造成了内存泄露。因此malloc对应free。可清除堆内容空间。
- 如果堆内容清除后,指针没有释放,指针指向的原堆空间因为为空,空间可能被系统存放其他数据,导致最后获取不到数据或者数据不正确,也就是所谓的野指针。
c函数中create,new,copy默认会开辟堆空间,最终都会调用malloc,返回一个指针,指针指向一个堆区,我们会将release和free结合使用,是因为release会在拿到堆区内容的时候,先去查找堆区里边哪些内容又开辟了堆空间,找到堆中所有存放指针的空间先将其释放掉,再free自身,调用顺序不能颠倒,如果先free,释放自身,那么自身含有的指针所对应的空间无法得到释放,也会造成内容泄露。用法相当与dealloc.
网友评论