2013-05-14 70 views
1

我在interface.h设置属性为我应该释放未使用的伊娃吗?

@porperty(nonatomic, retain) *foo; 

如果我我应该释放它的dealloc中不使用此伊娃在我的执行?

+2

是的,你应该 - 你的对象之外的东西可能已经将其设置为某个对象。 – 2013-05-14 07:36:27

+1

你应该在你的项目中使用ARC更好的内存管理 – 2013-05-14 07:46:02

+0

@AhmedZ。不,这不是更好。 – justin 2013-05-14 08:00:23

回答

2

是:

- (void)dealloc 
{ 
    // Other release code 
    [_foo release]; 

    [super dealloc]; 
} 

编辑:由于@borrrden约期间dealloc避免设置器尖端。

+3

建议不要在dealloc方法中使用“self”(用于解决可能存在的KVO问题),而是仅仅释放(并且如果您想要,则为nil)备份变量。 – borrrden 2013-05-14 07:39:56

+0

@borrrden你能否提供一个建议的来源?我的理解是你让二传手为你做了工作,这意味着它必须使用'self'来调用。 – trojanfoe 2013-05-14 07:41:25

+0

@trojanfoe [在dealloc中有没有使用self.property = nil的问题?](http://stackoverflow.com/questions/5621139/is-there-any-problem-using-self-property-nil-in-dealloc ),只是看看。(它也是我的一个新的信息) – 2013-05-14 07:47:03

-1

是你应该释放

发布,你可以这样写:

- (void)dealloc 
{ 
    // other release stuff 

    if(foo != nil) 
    { 
     [foo release]; 

     foo = nil; 
    } 
    [super dealloc]; 
} 
+3

对nil的测试是不必要的。你可以安全地将'release'发送给一个零对象。 – 2013-05-14 08:27:06

+0

如果他忘记了它,那么(foo!= nil)条件是真的,foo(一个悬挂指针)将被释放,导致崩溃。这对你提到的情况没有帮助。 – 2013-05-15 07:13:28

+0

是的,你的权利。如果对象尚未发布,我想发布。 – 2013-05-15 08:16:48

相关问题