[英]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
的消息不执行任何操作,并返回nil
, 0
或0.0
。 这就是为什么输出显示0个对象的原因:您首先没有数组。 造成这种情况的最可能原因是尚未调用viewDidLoad
,因此尚未创建可变数组。
在检查数组时,也可能有一个数组(即,视图已被加载),但在尝试进行检查时,您还没有数组(视图尚未被加载)添加到数组,因此您的addObject:
消息充耳不闻。
考虑早些创建阵列。 您可能应该在init
或initWithCoder:
创建它。
第三种可能性是您在添加阵列之前检查了阵列。 确保在两点上都记录或中断,以便您先知道哪个发生。
无论问题是什么,您还需要将数组分配给实例变量(而不是属性),或者在将数组分配给属性之前自动释放数组。 否则,您将过度保留阵列,这意味着您稍后可能会泄漏它。 您可能需要阅读《 Cocoa的内存管理编程指南》 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.