Вид пользовательского класса - PullRequest
0 голосов
/ 05 июля 2010

У меня есть следующий класс:

@interface Gamer {
...
}

+(id) CreatePlayer;
@end

@implementation Gamer

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

Мне нужно использовать Gamer в другом классе в качестве переменной экземпляра. Например, как это:

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

Это правильно? (Я думаю, что autorelease освободил mCenterGamer после выхода из функции init)

1 Ответ

0 голосов
/ 05 июля 2010

Вам необходимо сохранить mCenterGamer (и обязательно высвободить его в методе Layer -dealloc).Кроме того, -init нуждается в id в качестве типа возврата:

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

    return self;
}

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

Ваш -exampleFuncForUseGamer должен быть в порядке, в зависимости от того, что вы пытаетесь там сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...