2011-08-17 80 views
0

我知道很多類似的問題已經被問,這就是爲什麼我毫不猶豫地在所有張貼此,但我找不到任何確切回答我的問題:問題有關與@property @synthesize釋放對象

當我使用@property@synthesize,是否@synthesize負責釋放被設置對象的原始值?即如果我有:

@interface SomeClass:NSObject 
{ 
    NSObject *object; 
} 

@property (nonatomic, retain) NSObject *object; 
@end 

@implementation SomeClass 
@synthesize object; 
@end 

這相當於獲得一個看起來像這樣的setter方法嗎?

-(void)setObject:(NSObject *)newObject 
{ 
[object release]; 
object = [newObject retain]; 
} 

或者我必須照顧自己釋放原始對象嗎?

感謝您的澄清!

回答

2

答案是肯定的。 setter和getter是自動生成,並出色地完成讓你遠離內存管理:

-(void)setObject:(NSObject *)newObject { 
    if (object != newObject) { 
    [object release]; 
    object = [newObject retain]; 
    } 
} 

釋放你的對象,你可以撥打:

[self setObject:nil]; 
+0

相對於視控制器,其中一個最好的做法要求做self.object =零;在viewDidUnload()中做[object release];在dealloc中。由於對象在viewDidUnload nil賦值期間被釋放,我們的dealloc釋放調用被髮送到'nil'。 – Saran

1

不需要自己釋放原始對象,但是,您仍然需要清理-dealloc中的東西。