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

问题描述

| 更新:我已经在A的copyWithZone方法中找到了该错误。谢谢大家。 更新:抱歉,我确实声明了@properties,我认为这很明显,因此我在OP中跳过了它们。对于那个很抱歉。 崩溃消息是:尝试访问str时objA已释放(僵尸)内存。 我的数据结构如下所示:
@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;
我猜想在将B插入数组时objA和objA.str没有保留。但是我不知道如何确保他们得到再培训。 任何帮助表示赞赏 -狮子座     

解决方法

您应该为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;
    ,你应该看看 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html%23//apple_ref/doc/uid/TP30001163-CH17 了解属性以及它们如何管理内存。     ,你有没有尝试过:
[someMutableArray addObject: [newB copy] ];
    ,在这条线
someLabel.text = myB.A.str;
它应该是...
someLabel.text = myB.objA.str;
是的,您还应该为类的成员使用属性。那将保留他们。只是不要忘记在dealloc中释放