2012-03-14 74 views
2

我想释放的UIViewController对象的iOS 5 之前的iOS版本(> 5.0),我们总是写代码或以下内存无泄漏维护代码,释放iOS 5中的UIviewController对象?

if(myViewControllerObject != nil){ 
    [myViewControllerObject.view removeFromSuperView]; 
    [myViewControllerObject release]; 
    myViewControllerObject = nil; 
} 
myViewControllerObject = [[MyViewControllerObject alloc] initWithNibName:@"MyViewControllerObject" bundle:nil]; 
    [self.view addSubview: myViewControllerObject.view]; 

但在iOS 5中,我们不能使用发布释放UIviewController对象的方法,那么我们必须在iOS 5中做些什么来维护额外的对象分配和泄漏? 什么是最好的方法来实现这个层次?

谢谢。

回答

0

除非您为项目激活自动引用计数,否则您的代码不会更改为iOS 5。那么您将无法使用release,dealloc等,因为系统处理内存管理。

要了解更多关于ARC,看到了这个问题:How does the new automatic reference counting mechanism work?

+0

如果我们不释放对象不是一个崩溃的机会? – 2013-02-17 07:17:57

+0

不,不释放对象是一个不必要的内存消耗和内存泄漏的机会。但正如我所说,使用ARC将防止这一点 - 发行版自动完成(或多或少),这样你就不必写'自己release'语句。 – 2013-02-20 12:10:19

0

如果您使用ARC(自动保留/引用计数),则根本不需要使用release。编译器现在计算所有保留并自动释放它们。它并不是真正的垃圾收集,但编译器只是在没有使用对象的地方进行工作,并自动添加该版本。

因此,在回答你的问题时,只需保留它,编译器就会将其排除。

+0

感谢托马斯给我提供简短的解释.... NW我明白UR答案也是可以接受的:) – Tirth 2012-03-14 12:03:55

+1

但强制弧释放它,使用'myViewControllerObject = nil;'。 – Simon 2012-03-14 18:32:03

+0

如果我们没有发布对象不是一个崩溃的机会? – 2013-02-17 08:46:26

0

你不应该叫

[myViewControllerObject.view removeFromSuperView]; 

UIViewController类(基类myViewControllerObject的)在低内存可以自动设置这个属性为nil条件以及视图控制器本身最终被释放时。

所以这应该是罚款

[myViewControllerObject release]; 
myViewControllerObject = nil; 

更新:对于ARC参考下面的回答