gpt4 book ai didi

objective-c - 重新分配变量不起作用

转载 作者:搜寻专家 更新时间:2023-10-30 20:13:05 25 4
gpt4 key购买 nike

我有一个令人费解的问题 -- 看起来应该很容易做到,但不知何故它不起作用。我有一个名为 Player 的对象。 Manager 类有四个 Player 实例:

@interface Manager
{
Player *p1, *p2, *mCurrentPlayer, *mCurrentOpponent;
}
// @property...

Manager 对象有 initPlayers 和 swapPlayers 方法。

-(void) initPlayers {  // this works fine
self.p1 = [[Player alloc] init];
self.p2 = [[Player alloc] init];
self.mCurrentPlayer = self.p1;
self.mCurrentOpponent = self.p2;
}

-(void) swapPlayers { // this swapping of pointer doesn't work
self.mCurrentPlayer = self.p2;
self.mCurrentOpponent = self.p1;

// When I look at the pointer in debugger, self.mCurrentPlayer is still self.p1. :-(

// I even tried first setting them to nil,
// or first releasing them (with an extra retain on assignment) to no avail
}

我错过了什么?提前致谢!

最佳答案

如果不知道您的访问器是如何设置的,就很难按原样对代码进行故障排除。话虽如此,以下是您的访问器和代码应该的设置方式:

Manager.h

@interface Manager 
{
Player *p1, *p2, *mCurrentPlayer, *mCurrentOpponent;
}
@property (nonatomic, retain) Player *p1;
@property (nonatomic, retain) Player *p2;
@property (nonatomic, assign) Player *mCurrentPlayer;
@property (nonatomic, assign) Player *mCurrentOpponent;
@end

Manager.m

-(void) initPlayers {
self.p1 = [[[Player alloc] init] autorelease];
self.p2 = [[[Player alloc] init] autorelease];
self.mCurrentPlayer = self.p1;
self.mCurrentOpponent = self.p2;
}

-(void) swapPlayers {
Player * temp = self.mCurrentPlayer;
self.mCurrentPlayer = self.mCurrentOpponent;
self.mCurrentOpponent = temp;
}

关于objective-c - 重新分配变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com