iOS 的内存管理机制
注意:在oc语言中是有垃圾回收机制的, 但是在ios中没有垃圾回收机制, 注意二者区别
在IOS中, 内存使用引用计数来进行管理, 它可以看做是一种简单的垃圾回收机制(注意:我是说看做,不要误会哈)
每当在程序中使用了alloc, retain, copy等关键字, 就会使内存引用计数立即+1; release, autorelease会使引用计数-1, 这里要注意, release是立即-1, 而auto lease是在未来的某处进行释放, auto lease要和自动释放池搭配使用.
autorelease的对象会把这个对象放置到离它最近的自动释放池里,自动释放池释放的时候才会把自动释放池中的所有
对象的内存引用计数-1;
记住在对象使用结束后要对它进行释放, 减少内存的占用, 并且alloc, retain, copy是和release或者autorelease成对出现的, 内存引用+1了, 就一定要在某处-1, 保证内存引用计数的平衡
还需要注意的地方就是当对象被添加到容器里时(如数组),内存引用计数会立刻+1;比如
Student*stu = [[Student alloc] init];
NSMutableArray *array = [NSMutableArray array];
[arrar addObject:stu];
但是当你把这个对象添加到数组中时, stu的内存引用计数就为2了;
当stu从数组中取出时, 内存引用计数会-1, 即此时stu内存引用计数就为1了
总结: 在编写程序时一定要计算好内存引用计数是否平衡, 否则很容易造成野指针或内存泄露, 错误提示一般是BAD_EXC_ADDRESS, 这时只要去看看哪里释放过度,将它改正过来即可