2010-06-12 150 views
0

可以說我有ACLASS目標C - 內存管理

@interface Foo :NSobject 
{ 
    NSstring *a; 
    NSDate *b; 
} 
Foo *temp; 

我的問題是:當我使用[臨時保存] 不成員的櫃檯還保留? 可以說,我從某種方法得到了課程的參考,我想保留課程,我需要保留每個成員嗎?

回答

2

當我使用[溫度保留]成員的計數器還保留?

可以說,我有一些方法的類的裁判,我想保留類做我需要保留每個成員?

成員壽命應當由Foo類本身,Foo類的不是用戶進行管理。如果您可以/需要更改成員的保留計數,則該類未正確封裝。

0

不,呼叫[temp retain]不會保留ab。您將看到的典型模式是,ab保留在該類的-init方法中,並在-dealloc方法中發佈,該方法只要對象處於該方法中,就會保留它們。例如:

@implementation Foo 

- (id)initWithA:(NSString *)aString andB:(NSString *)bString 
{ 
    if (self = [ super init ]) { 
     a = [ aString copyWithZone:[ self zone ]]; 
     b = [ bString copyWithZone:[ self zone ]]; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [ a release ]; 
    [ b release ]; 

    [ super dealloc ]; 
} 

@end 

在這個例子中,ab自動保留爲-copyWithZone:調用的結果。你不需要自己保留它們。

0

Eimantas,

如果您使用的是垃圾收集,您可以假設如此。因爲你沒有指定一個iPhone應用程序,我會猜測你正在談論一個OS X應用程序,那麼問題仍然是你建立Leopard或以上?

弗蘭克

+0

我使用iPhone ... 感謝 – Amir 2010-06-13 13:14:47

+0

然後我推遲到KennyTM – 2010-06-14 11:27:40