NSMutableArray中对象的生命周期

时间:2010-08-11 21:02:17

标签: objective-c cocoa

有两个类,我们称之为A类和B类。

另外,在B类中,有一个名为arrayB的NSMutableArray。

@interface A {
   // for reference functions in B
   B *obj;
}
@property (assign) B *obj;
- (void) addObject: (id) objectB;

我通过致电来访问B:

obj = [[B alloc] init];

这是B的定义:

@interface B {
  NSMutableArray *arrayB;
}
@property (assign) NSMutableArray *arrayB;
- (void) printArray;

现在,我尝试通过A:

的函数将对象添加到arrayB
[self addObject: objectB]

- (void) addObject: (id) objectB {
   [obj.arrayB addObject:objectB];
   NSLog(@"%@", obj.arrayB);
   // here prints arrayB with objectB
}

然而,当我试图在B中再次访问对象时:

[self.obj printArray];

- (void) printArray {
   NSLog(@"%@", arrayB);
   // now it prints an empty array
}

我不知道这里发生了什么......

对象将由NSMutableArray的addObject自动保留,不是吗?

为什么每次都变空? > _<

请帮助我,谢谢!

3 个答案:

答案 0 :(得分:2)

看来你永远不会在B对象中初始化NSMutableArray,所以你的-addObject调用实际上是:

[nil addObject:myObject];

在Objective-C中几乎与什么都不做完全一样。

答案 1 :(得分:2)

很难通过微小的,无上下文的代码片段来判断错误的位置。但很可能这些你正在创建两个不同的B对象。

答案 2 :(得分:0)

NSMutableArray将保留您使用addObject添加的任何对象,您的问题就在其他地方。

NSObject * someObject = [[NSObject alloc] init]; [someMutableNSArray addObject:someObject]; [someObject release];

对someObject的唯一引用现在在数组中。