2011-02-16 101 views
0

- example.h文件 -我應該寫這個版本嗎?

@property (copy) NSString *string; 
@property (retain) Object *object; 

-- example.m -- 
(void) do { 
    // I have used 'string' and 'object' using their setter method several times. 
} 

(void) dealloc { 
    [ string release ]; // Should I write this code? 
    [ object release ]; // Should I write this code? 
} 

他們沒有使用頁頭,複製,新的。 但他們指出最新的對象是在他們的setter方法中製作而沒有發佈。 雖然這不是很重要,但我真的很想知道這種情況。

+0

不要忘了在`dealloc`方法的末尾發送'[super dealloc]`。 – 2011-02-16 08:31:18

+0

你有沒有`@綜合'這些實例變量? – 2011-02-16 08:36:48

+0

這個問題是一個總結。謝謝。 – MonsterK 2011-02-16 09:41:01

回答

2

你沒有@synthesize這些@property s,所以你的代碼將無法工作。 - 添加@synthesize指令,像這樣:

@synthesize string, object; 

是的,你應該向他們發送release消息-dealloc在這種情況下,因爲你使用copyretain,它們都獲得了接收器的所有權。

- (void) dealloc { 
    [string release]; 
    [object release]; 
    [super dealloc]; 
} 

也不要忘記調用[super dealloc] AT您-dealloc方法的底部!

0

是的,因爲您的NSString *stringcopy屬性,而您的NSObject *objectretain屬性。通過使用它們的setter,您的實例將分別複製並保留分配給它們的對象。

+0

謝謝BoltClock。 – MonsterK 2011-02-16 09:43:57

1

是的,你應該在這個例子中釋放。

0

因爲你@synthesized你的屬性,記得分配屬性nil將釋放你,確保代碼無法繼續使用。

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

如果您有實例變量(高德),那麼你應該使用release因爲沒有setter方法訪問,這將釋放它。

相關問題