何时使用自动释放变量?

时间:2013-10-10 13:47:27

标签: objective-c memory-management autorelease

在哪种情况下我应该使用自动释放的变量? 哪种方法最好来自以下..

  1. 使用obj= [[_className alloc]init]autorelease],

  2. obj = [[_className alloc]init]并将对象释放为[obj release]

    请帮忙。

  3. 当我希望在循环控制结构中创建和使用alocal对象时,我应该使用什么,如下所示。 。

    for(int i = 0;i<10;i++)
    {
        _className obj = [[_className alloc]init];//Should I use autorelease here?
    
           .
           . // Use this obj.. 
           .
        [obj release];//If autoreleased is not used...
    }
    

    我应该在列出的选项中使用什么?    哪个应该更好并优化?

2 个答案:

答案 0 :(得分:2)

最好的方法是使用ARC,而不必担心它。

但是如果你不使用ARC,我通常在大多数情况下更喜欢情况2。问题是当前的自动释放池什么时候会被耗尽。如果有一个循环有很多工作或我在库中不知道它将运行的上下文我可以控制何时释放对象而不是自动释放,并且它将在未来的某个未知时间发生。我可以为循环创建自己的自动释放池,但我更喜欢显式释放。

我看到案例1使用的地方是将一个对象分配给一个属性,所以它是一个单行语句,使用自动释放而不是分配,分配给属性,释放。

你有没有理由不使用ARC?

答案 1 :(得分:0)

如果您不使用ARC,那么我很快就会说当您不知道变量的范围时使用自动释放。当你知道变量的范围时使用release。