Objective c Obj C-每次调用方法时都给变量新的内存地址
有没有办法在for循环中重新分配一个变量以给它一个不同的内存地址 我正在使用ARC 代码的主要部分在这里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
- (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];