可以說我有ACLASS目標C - 內存管理
@interface Foo :NSobject
{
NSstring *a;
NSDate *b;
}
Foo *temp;
我的問題是:當我使用[臨時保存] 不成員的櫃檯還保留? 可以說,我從某種方法得到了課程的參考,我想保留課程,我需要保留每個成員嗎?
可以說我有ACLASS目標C - 內存管理
@interface Foo :NSobject
{
NSstring *a;
NSDate *b;
}
Foo *temp;
我的問題是:當我使用[臨時保存] 不成員的櫃檯還保留? 可以說,我從某種方法得到了課程的參考,我想保留課程,我需要保留每個成員嗎?
當我使用[溫度保留]成員的計數器還保留?
號
可以說,我有一些方法的類的裁判,我想保留類做我需要保留每個成員?
號
成員壽命應當由Foo類本身,Foo類的不是用戶進行管理。如果您可以/需要更改成員的保留計數,則該類未正確封裝。
不,呼叫[temp retain]
不會保留a
和b
。您將看到的典型模式是,a
和b
保留在該類的-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
在這個例子中,a
和b
自動保留爲-copyWithZone:
調用的結果。你不需要自己保留它們。
Eimantas,
如果您使用的是垃圾收集,您可以假設如此。因爲你沒有指定一個iPhone應用程序,我會猜測你正在談論一個OS X應用程序,那麼問題仍然是你建立Leopard或以上?
弗蘭克
我使用iPhone ... 感謝 – Amir 2010-06-13 13:14:47
然後我推遲到KennyTM – 2010-06-14 11:27:40