2010-07-05 71 views
0

我有下面的类:查看自定义类

@interface Gamer { 
... 
} 

+(id) CreatePlayer; 
@end 

@implementation Gamer 

+(id) CreatePlayer 
{ 
    return [[[self alloc] init]autorelease]; 
} 
@end 

我需要使用玩家在另一个类的实例变量。 例如这样:

@interface Layer{ 
    Gamer * mCenterGamer; 
} 
@end 
@implementation 
-(void) init{ 
    mCenterGamer = [Gamer CreatePlayer]; 
} 
-(void) exampleFuncForUseGamer{ 
    [mCenterGamer ...]// some methods of the Gamer class 
} 
@end 

它是正确的吗? (我认为autorelease释放init函数后释放了mCenterGamer)

+0

对不起,只有一个评论,而不是一个答案:你没有使用标准的可可模式来分配一个新的对象。除非你有充足的理由(你可能会这么做),你应该坚持标准模式 - 'mCenterGamer = [[Gamer alloc] init];'并且使用'Gamer'的'init'方法来准备使用 – ohhorob 2010-07-05 18:06:29

回答

0

您需要保留mCenterGamer(并确保将其释放到Layer的-dealloc方法中)。此外,-init需要id作为它的返回类型:

- (id)init { 
    if (self = [super init]) 
     mCenterGamer = [[Gamer CreatePlayer] retain]; 

    return self; 
} 

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

-exampleFuncForUseGamer应该罚款,这取决于你想在那里做什么。

+0

Thanks求助 – 2010-07-05 18:32:06