插入可变数组时如何保留此对象?

时间:2011-05-23 07:43:31

标签: iphone objective-c cocoa-touch

更新:我在A的copyWithZone方法中发现了这个错误。谢谢大家。

更新:对不起,我确实已经声明了@properties,我认为很明显,所以我在我的OP中跳过它们。对不起。

崩溃消息是:objA在尝试访问str时被释放(僵尸)内存。


我的数据结构如下:

@class A
{
   NSString *str;
}
@property (retain) NSString *str;  // str synthesized in .m


@class B
{
   A *objA;
}
@property (copy) A *objA;  // objA synthesized in .m

我想做的是:

B *newB = [[B alloc] init];
[someMutableArray addObject: newB];

但是,当我尝试像这样访问时,我会崩溃一些:

B *myB = [someMutableArray objectAtIndex: index];

someLabel.text = myB.objA.str;

我猜objA&将B插入数组时,不保留objA.str。但我不知道如何确保他们重新训练。

感谢任何帮助

-Leo

4 个答案:

答案 0 :(得分:3)

您应该使用A类和B类的属性:

@interface A : NSObject {
    NSString *str;
}

@property (nonatomic, retain) NSString *str;
@end

使用@synthesize str;在.m文件中,这将保留str,不要忘记在dealloc方法中释放str:

@implementation A 

@synthesize str;

- (void) dealloc { 
   [str release], str= nil; 
   [super dealloc]; 
}

@end;

答案 1 :(得分:0)

答案 2 :(得分:0)

你试过了吗?

[someMutableArray addObject: [newB copy] ];

答案 3 :(得分:0)

在这一行

someLabel.text = myB.A.str;

它应该是......

someLabel.text = myB.objA.str;

是的,您也应该为您班级的成员使用属性。这将保留他们。只是不要忘记在dealloc中发布