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

标签 objective-c

我有一个令人费解的问题 -- 看起来应该很容易做到,但不知何故它不起作用。我有一个名为 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/

相关文章:

ios - 特殊字符串格式的 ObjC 注册应用程序

ios - 如何保存通过 AVCaptureSession 拍摄的图像

iphone - 在 bundle 中找不到名为 'Main' 的 Storyboard

iphone - 网页 View 在 Safari 中使用某些关键字打开链接

objective-c - 为什么我的目标没有打印到控制台?

ios - 在登录时存储用户信息以备后用

iphone - 如何在 NSArray 中获取索引?

ios - 如何检查 FB AppRequest 是否被点击?

objective-c - setPatternPhase : in an NSSplitView for NSColor using colorWithPatternImage: 的问题

objective-c - GCD : How to remove waiting tasks from serial queue?