更新:我在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
答案 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中发布