有两个类,我们称之为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自动保留,不是吗?
为什么每次都变空? > _<
请帮助我,谢谢!
答案 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的唯一引用现在在数组中。