objective-c - 将对象添加到 NSMutableArray 时出现问题

标签 objective-c ios arrays

我在向我的 NSMutableArray 添加对象时遇到问题。似乎添加了一些东西(调试器中的对象计数增加 1),但唯一添加的是 0x0(空)而不是对象的地址。我已经通读了所有我能找到的相关内容,但我找不到任何似乎可以回答这个问题的内容。大多数相关帖子似乎都围绕内存管理展开,但解决方案并没有突然出现在我面前。

感谢您提供的任何帮助。

我已经包含了我认为是代码的相关部分。如果您需要查看更多信息,请告诉我。

游戏 View .h

@interface GamePlayView : UIViewController 
{
    Player *gamePlayer;
    NSMutableArray *boardObjects;
}

@property (retain, nonatomic) Player *gamePlayer;
@property (retain, nonatomic) NSMutableArray *boardObjects;

@end

GamePlayView.m

- (void)viewDidLoad 
{
    // Create player

    Player *tempPlayer = [[Player alloc] initWithFrame: self.view.frame];
    if (tempPlayer == NULL) {
        NSLog(@"GamePlayView viewDidLoad: null Player");
    }
    else gamePlayer = tempPlayer;

    // Create array of board objects

    NSMutableArray *newArray = [[NSMutableArray alloc] init];

    self.boardObjects = newArray;
    [self.boardObjects addObject: gamePlayer];  // First breakpoint here
    topObject = 0;

    BoardObject *mine = [[BoardObject alloc] initWithFrame: self.view.frame];

    [self.boardObjects addObject: mine];  // Second breakpoint here
    topObject = 1;

    [super viewDidLoad];

} // End viewDidLoad

我在 addObject 行放置断点(在代码中注释)。当执行在第一个断点处停止时,调试器会显示一个良好的 tempPlayer 和一个良好的 gamePlayer(两者具有相同的地址)。它在 boardObjects 中显示 0 个对象,如下所示:

boardObjects = (_NSArrayM *) 0x4b22080 0 objects

当我越过这个断点时,调试器在 boardObjects 中显示 1 个对象,如下所示:

boardObjects = (_NSArrayM *) 0x4b22080 1 objects
    0 = (NSObject *) 0x0

当我继续执行程序,并且调试器在下一个断点处停止时,我也看到了一个很好的 mine 对象,其中 boardObjects 仍然如上所述。跨过这个断点后,boardObjects 现在看起来像这样:

boardObjects = (_NSArrayM *) 0x4b22080 2 objects
    0 = (NSObject *) 0x0
    1 = (NSObject *) 0x0

最佳答案

这可能是因为tempPlayer是一个局部变量,函数返回后,局部变量自动释放。

关于objective-c - 将对象添加到 NSMutableArray 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211377/

相关文章:

ios - 将 NSImage 从 CMYK 转换为 RGB

iphone - 游戏在真机 iPhone 上崩溃,但在模拟器上崩溃?内存问题?

ios - 将自动布局与 UIImageView 一起使用不会保留帧大小

arrays - 如何在给定整数数组中的 100 万数据的情况下有效搜索 - ruby

iphone - iphone内存泄漏

iphone - 根据距离生成随机地理坐标

ios - Xcode 7.1 错误 UIAccessibility 错误

ios - 我试图在覆盖 func tableView(...didSelectRowAt...) 时关闭我的 tableViewController,但没有任何反应

php - 在 PHP 中合并 3 个数组

javascript - Google Apps javascript 遍历多个数组