黑马程序员技术交流社区
标题:
内存释放的问题
[打印本页]
作者:
程序猿-2014
时间:
2014-4-13 23:57
标题:
内存释放的问题
本帖最后由 程序猿-2014 于 2014-4-14 22:52 编辑
Student *s = [[Student alloc]init];
NSArray *arr = [NSArray arrayWithObject:s];
[s release];
如果我要把这个的内存释放了该怎么做呢 求大神解惑 最好能详细点
作者:
董月峰
时间:
2014-4-14 08:42
先把ARC关了,然后就可以跟你那么写的做了-。-
作者:
FlyTrem
时间:
2014-4-14 09:19
本帖最后由 FlyTrem 于 2014-4-14 09:22 编辑
非ARC情况:
Student *s = [[Student alloc]init]; // 新对象且指针s指向它
NSArray *arr = [NSArray arrayWithObject:s]; // 对象被引用,arr指针指向了s的地址,对象被两个指针指着
[s release]; // 被释放了一次,引用计数器还是一
作者:
于清扬
时间:
2014-4-14 09:39
{
Student *s = [[Student alloc]init]; // retainCount == 1
// 数组中保存的其实是指向对象的指针,在非ARC中会使对象的引用计数器加1。
// 但arr是个局部变量,出了大扩号就没了
NSArray *arr = [NSArray arrayWithObject:s]; // retainCount == 2
[s release]; // retainCount == 1
} // arr 是局部变量,被销毁 retainCount == 0
复制代码
作者:
yaozeyang_2014
时间:
2014-4-14 15:13
这个student对象s在创建的时候计数器+1,在数组那里被调用也会加1,但是因为数组是内部的类,使用的是静态方法,数组调完后自动释放一次,也就是计数器会减一,最后你也来了一个[s release],所以这是没有内存泄漏的,符合内存管理原则,谁创建谁释放
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2