让我说我有一个等级
@interface Foo :NSobject
{
NSstring *a;
NSDate *b;
}
Foo *temp;
我的问题是:当我使用[temp retain]时 会员的柜台也保留吗? 让我说我从某种方法得到了类的参考,我想保留这个类,我需要保留每个成员吗?
答案 0 :(得分:2)
当我使用[temp retain]时,成员的计数器也会保留吗?
没有
让我说我从某种方法得到了类的参考,我想保留这个类,我需要保留每个成员吗?
没有。
成员的生命周期应该由Foo类本身管理,而不是Foo类的用户。如果您可以/需要更改成员的保留计数,则该类未正确封装。
答案 1 :(得分:0)
不,呼叫[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:
调用而自动保留。你不需要自己保留它们。
答案 2 :(得分:0)
Eimantas,
如果您使用垃圾收集,则可以假设。由于你没有指定一个iPhone应用程序,我猜你会在谈论一个OS X应用程序,然后问题仍然是你为Leopard或以上构建?
谢