2010-07-05 92 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