代码之家  ›  专栏  ›  技术社区  ›  theprojectabot

简单可变数组问题

  •  0
  • theprojectabot  · 技术社区  · 16 年前

    嗯,这里的问题很简单:

    我在头文件中声明了一个NSMutableArray实例

    NSMutableArray *day19;
    
    @property (nonatomic, retain) NSMutableArray *day19
    

    实施:

    @synthesize day19;
    

    在我看来

    self.day19 = [[NSMutableArray alloc] init];
    

    在我要向数组添加对象的myMethod中,我:

    NSObject *newObject = [[NSObject alloc] init];
    
    [day19 addObject:newObject];
    

    然而。。。当我检查day19数组时,里面什么都没有。如果相反地将newObject添加到myMethod范围内的tempArray,然后将day19数组设置为tempArray,则day19具有这些对象。

    超基本的我知道一定是一个混乱的早晨或什么的。。。

    3 回复  |  直到 16 年前
        1
  •  0
  •   Peter Hosey    16 年前

    在我看来

    self.day19 = [[NSMutableArray alloc] init];
    

    NSObject *newObject = [[NSObject alloc] init];
    
    [day19 addObject:newObject];
    

    然而。。。当我检查第19天数组时,它没有任何东西。如果我反过来将newObject添加到myMethod作用域中的tempArray中,然后将day19数组设置为tempArray,那么第19天将具有对象。

    让我猜猜:你用这样的代码检查数组:

    NSLog(@"day19 contains %lu objects", [day19 count]);
    

    nil , 0 0.0 . 这就是为什么输出说0个对象:首先你没有数组。最可能的原因是 viewDidLoad 尚未调用,因此您尚未创建可变数组。

    也有可能在检查数组时有数组(即视图已加载),但在尝试添加到数组时还没有数组(视图尚未加载),因此 addObject: 消息被置若罔闻。

    考虑早些时候创建数组。你可能应该在 init initWithCoder: .

    不管问题是什么,您还需要将数组赋给实例变量,而不是属性,或者在将数组赋给属性之前自动释放数组。否则,您会过度保留阵列,这意味着您以后可能会泄漏它。你可能需要回顾一下 Memory Management Programming Guide for Cocoa

        2
  •  1
  •   mipadi    16 年前

    day19

        3
  •  1
  •   Community Mohan Dere    9 年前

    你确定吗? viewDidLoad here .

    另外,至少从你发布的代码来看,你的代码看起来有点马虎。如果您的属性是保留类型,则不应写入:

    self.myProperty = [[Something alloc] init]; // double retain here, bad
    

    你应该写下这样的东西:

    self.myProperty = [[[Something alloc] init] autorelease]; // single, good
    

    NSObject *newObject = [[NSObject alloc] init];
    [day19 addObject:newObject];
    

    除非你有

    [newObject release];
    

    你的记忆泄露了。