Objective c Obj C-每次调用方法时都给变量新的内存地址

Objective c Obj C-每次调用方法时都给变量新的内存地址,objective-c,memory,automatic-ref-counting,Objective C,Memory,Automatic Ref Counting,有没有办法在for循环中重新分配一个变量以给它一个不同的内存地址 我正在使用ARC 代码的主要部分在这里 - (void) deal:(BOOL)isDefault { player = [[Player alloc] init]; appDel = [[BlackjackAppDelegate alloc] init]; appDel.playersArray = [[NSMutableArray alloc] init]; appDel.discardPile

有没有办法在for循环中重新分配一个变量以给它一个不同的内存地址

我正在使用ARC

代码的主要部分在这里

- (void) deal:(BOOL)isDefault
{
    player = [[Player alloc] init];
    appDel = [[BlackjackAppDelegate alloc] init];
    appDel.playersArray = [[NSMutableArray alloc] init];
    appDel.discardPile = [[NSMutableArray alloc] init];

    // Initial Deal

    int i; // Current Card for player
    int j; // Current Player

    if (isDefault)
    {
        startingCardCount = 7;
        numberOfPlayers = 4;
    }

    for (int temp = 0; temp < numberOfPlayers; temp++)
    {
        [self addPlayersWithNumber:temp];
    }

    // Loops through number of cards supposed to be in hand (if default settings: use 7 cards)
    for (i = 0; i < startingCardCount; i++)
    {
        // Loop through number of players (if default settings: use 4 players)
        for (j = 0; j < numberOfPlayers; j++)
        {
            //Player *tempPlayer = [appDel.playersArray objectAtIndex:j];
            Card *card = [Card generateCardWithAppDel:appDel];
            Player *tempPlayer = [appDel.playersArray objectAtIndex:j];

            [tempPlayer.hand addObject:card];
            [self refreshPlayerIndex:j withPlayer:tempPlayer];
        }
    }
}
- (void) addPlayersWithNumber:(NSInteger)playerNumber
{
    // THIS VARIABLE I WANT TO "REALLOCATE" EACH TIME THIS METHOD IS CALLED
    Player *tempPlayer = [[Player alloc] init];
    tempPlayer.number = playerNumber;

    [appDel.playersArray addObject:player];
}

我认为你误解了一个错误。请看以下内容:

Player *tempPlayer = [[Player alloc] init];
tempPlayer.number = playerNumber;

[appDel.playersArray addObject:player];
你在那里做的是:

  • 创建播放机,
    templayer
  • 将实例变量
    player
    添加到
    playersArray
  • 因此,您创建的每个
    templayer
    都是唯一的,它们都不会放入您的数组中

    tempPlayer.number = playerNumber;
    [appDel.playersArray addObject:player];
    
    应该是:

    tempPlayer.number = playerNumber;
    [appDel.playersArray addObject:tempPlayer];
    

    您为循环发布了三个
    。什么代码是相关的,不同的内存地址是什么意思?您需要更准确地说明您的意思。顺便说一句:在内部for循环中有一个明显的错误,你创建了一个
    templayer
    ,但却在下一行覆盖了它。您可以创建templayer(alloc+init dance)或从某个数组中检索它,但不能同时从这两个数组中检索。@woz第一个for循环调用
    addPlayersWithNumber
    方法,该方法具有变量。。。在调试控制台中,它会显示
    templayer=(Player*)0x0724ccc0
    -我想在每次调用
    0x0724ccc0
    位时更改它,否则当它得到added@verec我确实对这个bug感到好奇,但还是分配并启动了它,哈哈(但这不是问题所在,这是第一个for循环)是的,有什么问题吗?听起来很好。你不必担心内存地址。这就是使用Objective-C而不是assembly的意义。如果这是唯一的错误,我可以看出他是怎么犯的。我已经看了几分钟了,甚至没有注意到。接得好!哦哦哦哦哦哦哦哦天哪!!我怎么错过了that@ZachRoss-克莱恩,你还应该修复您的init方法。您应该在其中有一行“if(self=[super init])。我应该把它放在哪里?
    tempPlayer.number = playerNumber;
    [appDel.playersArray addObject:player];
    
    tempPlayer.number = playerNumber;
    [appDel.playersArray addObject:tempPlayer];