获取实例变量?

时间:2010-07-01 18:30:50

标签: objective-c

我有以下课程:

@interface Gamer : CCNode {
NSMutableArray * cards;
}
@property (nonatomic, retain) NSMutableArray * cards;

+(id) CreatePlayer;
-(BOOL)SetCardsArr:(NSMutableArray *) cs;
-(BOOL)GetCardForMove:(Card*) card actionCard:(Card*)selCard;
@end

@implementation Gamer

@synthesize cards;

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

-(BOOL) SetCardsArr:(NSMutableArray *) cs
{
if (!cs) return NO; 
cards = [cs copy];
return YES;  
}
-(BOOL)GetCardForMove:(Card*) card actionCard:(Card*)selCard;
{
for (Card * curCard in cards)
    {
    if ([curCard GetCardSuit] == [selCard GetCardSuit])
            {
        selCard = curCard;
        break;
    }
}
return YES;
}

 -(id) init
 {
if(![super init]) return nil;

return self;
 }
 - (void)dealloc
 {
[cards release];
[super dealloc];
 }
@end

在我的主要游戏类中,我借助SetCardsArr方法设置了游戏玩家阵列。 经过一些动作后,我试图通过GetCardForMove方法获取Gamer卡,如下所示:

Card * moveCard = nil;
    Card * selCard = card;
[mGamer GetCardForMove:moveCard actionCard:selCard];

GetCardForMove功能正常,找到并正确分配卡但Card * moveCard为零:(。 我是Objective-C的新手,有点困惑,请指出我的错误。

1 个答案:

答案 0 :(得分:0)

实际上卡根本没有分配。如果您希望方法之外的代码能够看到卡片,请执行以下操作(更好的方法):

- (Card *)cardForActionCard: (Card *)selCard {
  //stuff
  return usefulCard;
}

或者这(与您当前的代码最相似):

- (BOOL)getCardForMove: (Card **)card actionCard: (Card *)selCard {
  //stuff
  if (card) {
    *card = usefulCard;
  }
  return YES;
}

顺便说一句,这与你的问题无关,但是你的代码包含了一些关于内存管理的问题(我假设你有一个dealloc方法,你处于一个保留计数的环境中)。无需在此处覆盖它们,只需运行“构建和分析”并修复它报告的问题。