2011-01-19 54 views

回答

4

直接释放伊娃最好。如果一个子类覆盖了一个属性的setter方法,那么你的对象可能会泄漏,因为你的setter没有被调用。考虑:

@interface ClassA 
@property (readwrite, retain) id anObject; 
@end 

@interface ClassB : ClassA 
@end 

@implementation ClassA 
@synthesize anObject; 

- (void)dealloc { 
    self.anObject = nil; 

    [super dealloc]; 
} 
@end 

@implementation ClassB 
- (void)setAnObject: (id)anObject { 
    // do nothing! 
} 
@end 

ClassB的实例将泄漏anObject

1

取决于如何你这样做,如果你通过属性setter做到这一点(不推荐),然后是。

如果你做直接任务,那么不行,因为保留的对象会泄漏。

所以这是好的:

- (void) dealloc { 
    self.test = nil; 
    [super dealloc]; 
} 

但这是一个不走

- (void) dealloc { 
    test = nil; 
    [super dealloc]; 
} 

我的建议是只发送release消息到所有保留的高德的-dealloc,这将很好地工作,因为如果test碰巧是nil,那么什么都不会发生。

相信我。直接在-dealloc发送release。就这些。

- (void) dealloc { 
    [test release]; 
    [super dealloc]; 
} 
+0

分配它有什么问题? – Abhinav 2011-01-19 23:04:16

+2

它不会调用setter,所以它会泄漏对象而不是释放它。 – 2011-01-19 23:05:38