【问题标题】:NSMutableArray within singleton class always returns count 0 / never retains its objects单例类中的 NSMutableArray 始终返回计数 0/从不保留其对象
【发布时间】:2012-01-13 19:42:07
【问题描述】:

我的简化单例如下所示:

@interface MyClass : NSObject {
    NSMutableArray * myArray;
}

+ (MyClass*) instance;
@property(nonatomic,retain)NSMutableArray *myArray;

然后在实现中

static MyClass * myinstance;
@synthesize myArray;

+ (MyClass*) instance {
    if(myinstance == nil)
        myinstance = [[MyClass alloc] init];

    return myinstance;
}


- (id) init {
    if(self = [super init]) {
      myArray = [[NSMutableArray alloc] initWithCapacity:2];
      [myArray addObject:@"Trauma"];
     }
     return self;
}

但是,当我尝试为 tableview 访问它时,它总是返回 0:

[[[MyClass instance] myArray] count];

有点不确定我做错了什么

【问题讨论】:

  • 这段代码看起来可以工作。我建议您的应用程序中的实际代码中存在错误。那么,您所做的与您在此处发布的内容有何不同?

标签: iphone ios memory-management singleton nsmutablearray


【解决方案1】:

返回单例实例的方法名为+instance,但在尝试访问单例时,您使用的是+myinstance。您的MyClass 实例很可能为零。

【讨论】:

  • 我很惊讶问题中的代码没有给出编译器错误。
  • 它必须至少产生一个警告,但谁知道警告列表有多大;)
  • 实际上这是一个错字:我已将带有名称的代码翻译成更通用的代码。现在编辑...(我也有 0 个编译器警告:p)
  • 所以您希望通过让人们阅读实际上不是您的实际代码的代码来帮助您在实际代码中发现错误? :)
  • 尝试改变 myArray = [[NSMutableArray alloc] initWithCapacity:2]; to myArray = [[[NSMutableArray alloc] initWithCapacity:2] retain];
猜你喜欢
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多