您的位置:首页 > 移动开发 > IOS开发

ios内存管理机制

2014-12-23 20:01 232 查看
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的内存引用计数为1;
但是当你把这个对象添加到数组中时, stu的内存引用计数就为2了;
当stu从数组中取出时, 内存引用计数会-1, 即此时stu内存引用计数就为1了

总结: 在编写程序时一定要计算好内存引用计数是否平衡, 否则很容易造成野指针或内存泄露, 错误提示一般是BAD_EXC_ADDRESS, 这时只要去看看哪里释放过度,将它改正过来即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存管理