【问题标题】:Objective C: NSMutableArray does not retain objects目标 C:NSMutableArray 不保留对象
【发布时间】:2011-09-08 01:53:11
【问题描述】:

我被这个难住了,我在数组中设置了对象,但是当我在它们都设置好后检查它时,它显示为 (null)

for (int i = 0; i < [lines count]; i+=2) {
    [terms addObject:[lines objectAtIndex:i]];
    NSLog(@"%@",[terms objectAtIndex:i]);
}

我做错了吗? terms在header中声明,设置为属性,合成为NSMutableArray

【问题讨论】:

标签: iphone objective-c ios arrays


【解决方案1】:

您必须先分配并初始化数组,然后才能使用它。设置该属性使其可以在类外部访问,并且合成器设置了 getter 和 setter,但它不会分配和初始化它。

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

【讨论】:

  • 以为我忘记了什么。现在工作
  • Objective C 的一个奇怪的“特性”是对 nil 指针的调用被愉快地忽略了,所以即使你的可变数组从未被创建,也不会引发错误。 C 或 Java 会给你某种空指针异常,相当快地提醒你忘记创建该死的东西。
  • @Daniel 当你使用 Objective C 时,你必须牢记这一点。特性部分是你不必检查你的指针是否为 nil 来检查你的代码。更简洁的代码。
  • 是的,它有它的优势。但是,与此类功能的常见情况一样,涉及到一些与魔鬼有关的交易。
【解决方案2】:

“合成为 NSMutableArray”——这是一个奇怪的措辞。在 ObjC 中,@synthesize 不初始化变量 - 只是生成一个 getter 和一个 setter 方法。您仍然必须以某种方式分配变量 - 通过分配给属性或直接设置相应的 ivar。 init 是这样做的好地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2017-08-26
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多