繁体   English   中英

简单的NSMutable数组问题

[英]simple NSMutable array question

嗯,这里的问题很简单:

我在标头中声明了NSMutableArray的实例

NSMutableArray *day19;

@property (nonatomic, retain) NSMutableArray *day19

执行:

@synthesize day19;

在我的viewDidLoad中

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

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

NSObject *newObject = [[NSObject alloc] init];

[day19 addObject:newObject];

但是...当我检查day19数组时,里面什么也没有。 相反,如果我在myMethod范围内将newObject添加到tempArray,然后将day19数组设置为tempArray,则day19具有对象。

我知道超级基础一定是一个混乱的早晨之类的东西。。。

谢谢你的帮助

day19实际上是一个实例变量吗? 在代码段中,尚不清楚何时将其声明为实例变量或仅声明为类范围之外的变量。

有几件事:

您确定viewDidLoad是初始化数组的正确位置吗? 在这里商谈。

另外,至少从您发布的代码来看,您的保留似乎很草率。 如果您的属性是保留类型,则不应编写:

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];

沿着长矛,你有一个内存泄漏。

在我的viewDidLoad中

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

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

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

但是...当我检查day19数组时,里面什么也没有。 相反,如果我在myMethod范围内将newObject添加到tempArray,然后将day19数组设置为tempArray,则day19具有对象。

让我猜测:您使用以下代码检查了数组:

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

请记住,发送到nil的消息不执行任何操作,并返回nil00.0 这就是为什么输出显示0个对象的原因:您首先没有数组。 造成这种情况的最可能原因是尚未调用viewDidLoad ,因此尚未创建可变数组。

在检查数组时,也可能有一个数组(即,视图已被加载),但在尝试进行检查时,您还没有数组(视图尚未被加载)添加到数组,因此您的addObject:消息充耳不闻。

考虑早些创建阵列。 您可能应该在initinitWithCoder:创建它。

第三种可能性是您在添加阵列之前检查了阵列。 确保在两点上都记录或中断,以便您先知道哪个发生。

无论问题是什么,您还需要将数组分配给实例变量(而不是属性),或者在将数组分配给属性之前自动释放数组。 否则,您将过度保留阵列,这意味着您稍后可能会泄漏它。 您可能需要阅读《 Cocoa内存管理编程指南》

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM