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

iOS中内存管理问题

2015-07-29 18:56 330 查看

mrc

在学习的时候一致有一个地方不理解,为什么变量retain之后又release,现在算是明白了:

- (void)setFoo:(Foo *)foo{
if (_foo != foo) {
//_foo是当前实例变量,foo为传入的参数,两者是不同的实例变量,指向不同内存空间
[_foo release];
//把_foo引用计数减1后为零,把指向的内存空间释放,而foo当前是被autoRelease的,实际引用计数为1,但之后自动为0
_foo = nil;
//提高安全性
_foo = [foo retain];
//把foo指向的内存空间引用计数加一,把_foo的指向到foo的内存空间,即现在两者指向同一个地址,如果此时不retain之后_foo和foo指向的内存会被释放
}
}


抛出异常

mrc下try块内创建了对象,必须清理干净:

A *a;
@try {
a = [[A alloc] init];
}
@catch(...) {
NSLog(@"Error");
}
@finally {
[a release];
}


而在arc下,arc并不会自动调用release,所以有可能会造成内存泄漏,这个时候可以开启编译器标志-fobjc-arc-exceptions,但是这么做会导致app变大,降低运行效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 内存管理