簡體   English   中英

插入可變數組時如何保留該對象?

[英]How to retain this object when inserting to mutable array?

更新:我已經在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;

你有沒有嘗試過:

[someMutableArray addObject: [newB copy] ];

在這條線

someLabel.text = myB.A.str;

它應該是...

someLabel.text = myB.objA.str;

是的,您還應該為類的成員使用屬性。 那將保留他們。 只是不要忘記在dealloc中釋放

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM