gpt4 book ai didi

objective-c - NSMutableArray addObject 不添加对象,并且对象已分配

转载 作者:行者123 更新时间:2023-11-28 18:44:37 25 4
gpt4 key购买 nike

我正在尝试在 NSMutableArray 上使用 addObject: 以及我创建的名为 Position 的类。根据日志,我添加到数组中的 Position 实例不是 nil -- 我可以将它的属性输出到日志中。但是,该数组似乎从未实际占据 Position

@implementation Position

@synthesize tradeDirection, instrument, quantity, fill, profit, positive, index;

-(id)initWithArray:(NSArray*)data
{
self = [super init];
if (self)
{
self.tradeDirection = [data objectAtIndex:0];
self.instrument = [data objectAtIndex:1];
self.quantity = [data objectAtIndex:2];
self.fill = (NSNumber*)[data objectAtIndex:3];
self.profit = [data objectAtIndex:4];
self.positive = [@"True" isEqualToString:[data objectAtIndex:5]];
self.index = (NSNumber*)[data objectAtIndex:6];
}
return self;
}

+(Position*)createPositionWithString:(NSString*)data
{
return [[[self alloc] initWithArray:[data componentsSeparatedByString:@"#"]] autorelease];
}

@end

loadPositions:数据方法

-(void)loadPositions:(NSString*)data
{
TT_RELEASE_SAFELY(_positions);
NSArray* dataArray = [data componentsSeparatedByString:@";"];
for (int i = 2; i <= [dataArray count] - 2; i++)
{
//TODO: Discover why this does not add a position.
Position* newPos = [Position createPositionWithString:[dataArray objectAtIndex:i]];
[_positions addObject:newPos]; //position never actually gets added
NSLog(@"Position direction: %@", newPos.tradeDirection); //logs what I expect, i.e. newPos is not nil
}
}

调用loadPositions:data后,_positions仍然是nil。非常简单;我感觉这与内存管理有关,但在这一点上我只需要另一双眼睛。我错过了什么?

最佳答案

TT_RELEASE_SAFELY 宏在将其分配给 nil (IIRC) 之前向其参数发送释放消息。为什么 _positions 为零有什么奇怪的?

虽然您可能出于任何原因需要释放 _postitions,但您必须先分配和初始化一个新对象并将其引用分配给 _positions,然后才能向其添加项目。

编辑:正如 Luke 在他的评论中指出的那样,TT_RELEASE_SAFELY 来自 three20 库。

#define TT_RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }

关于objective-c - NSMutableArray addObject 不添加对象,并且对象已分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6180419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com