2013-05-03 27 views
-1

有没有办法重新分配一个变量,给它一个不同的内存地址里面一个for循环的OBJÇ - 给变量新的内存地址,每次调用方法

我使用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.h:

// 
// Player.h 
// Blackjack 
// 
// Created by Zach Ross-Clyne on 02/03/2013. 
// Copyright (c) 2013 Avicode. All rights reserved. 
// 

#import <Foundation/Foundation.h> 
#import "BlackjackAppDelegate.h" 

@interface Player : NSObject 
{ 
    NSInteger type; 
    NSInteger number; 
    NSMutableArray *hand; 
} 

@property (nonatomic, strong) NSMutableArray *hand; 
@property (nonatomic) NSInteger type; 
@property (nonatomic) NSInteger number; 

@end 

Player.m

// 
// Player.m 
// Blackjack 
// 
// Created by Zach Ross-Clyne on 02/03/2013. 
// Copyright (c) 2013 Avicode. All rights reserved. 
// 

#import "Player.h" 

@implementation Player 

@synthesize number, hand, type; 

- (id) init 
{ 
    hand = [[NSMutableArray alloc] init]; 
    return self; 
} 

@end 
+0

您发布3'for'循环。什么代码是相关的,以及你的意思是不同的内存地址? – woz 2013-05-03 19:18:20

+0

你需要更精确地表达你的意思。顺便说一句:内循环中有一个明显的错误,你只需要在下一行创建一个'tempPlayer'来覆盖它。要么你创建你的tempPlayer(alloc + init舞蹈),要么你从一些数组中检索它,但不能同时使用它们。 – verec 2013-05-03 19:20:49

+0

@woz第一个for循环,那个调用'addPlayersWithNumber'方法,它具有变量...并且在调试控制台中它说'tempPlayer =(Player *)0x0724ccc0' - 我想改变0x0724ccc0位每次被调用,否则其数组中的“相同”对象 – 2013-05-03 19:21:46

回答

4

我认为你误解了一个错误。请看下面:

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

[appDel.playersArray addObject:player]; 

你在做什么有:

  1. 创建一个播放器,tempPlayer;
  2. 添加实例变量,playerplayersArray

所以,你创造都是独一无二的,没有人是永远把你的阵列中的每个tempPlayer

+0

如果这是唯一的错误,我可以看到他是如何做到的。我一直在看这几分钟,甚至没有注意到。好的赶上! – woz 2013-05-03 19:50:41

+1

OOOOOOOOOHHHHHH亲爱的!我怎么会错过 – 2013-05-03 19:51:00

+0

谢谢你这么多 – 2013-05-03 19:52:08

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

应该是:

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