gpt4 book ai didi

iphone - 初始化 NSMutableArray 的内存/设计模式/重构

转载 作者:行者123 更新时间:2023-12-03 21:17:48 31 4
gpt4 key购买 nike

我有一个显示在 UIPopoverController 中的 View 。以前,它仅具有与其单个对象的 View 关联的属性。所以它会是这样的

TargetDetailView : NSObject
@property Target *target

- (id)initWithTarget:(Target *)target

但是现在,在某些情况下,根据用户查看 View 的缩放级别,弹出窗口中将会有多个目标。所以我添加了一个NSMutableArray *targets属性到类以便在弹出窗口中显示多个目标。

现在,在我们的 View 上绘制的实际目标对象被绘制在彼此之上,这是一种浪费。

只有当您实际单击目标并呈现弹出窗口时,才会调用 initWithTarget 方法。

我现在想做的是提前计算我将在同一位置有多个目标,仅绘制一次,但按下时显示弹出窗口,这一次,使用 NSArray *targets进行搜索以显示该位置的多个目标。

我遇到的问题是我不知道在哪里初始化 NSMutableArray *targets. 的内存TargetDetailView 仅在您按下目标时才会初始化,但当目标 View 彼此重叠时,我想从其他类提前计算,以便仅绘制一次。

我按照位置顺序对目标进行排序,然后查看前两个目标的位置是否足够相似以将它们分类:

for (int i = 0; i < [sortedArray count] - 1; i++) {
TargetDetailView *firstTargetDetailView = (TargetDetailView *)[sortedArray objectAtIndex:i];
TargetDetailView *secondTargetDetailView = (TargetDetailView *)[sortedArray objectAtIndex:i + 1];

if (secondTargetDetailView.target.location - firstTargetDetailView.target.location < scale) {
[firstTargetDetailView.targets addObject:secondTargetDetailView.target]; // crash
[newTargetDetailViewArray addObject:(TargetDetailView *)[sortedArray objectAtIndex:i]];

}
}

我尝试让第一个 TargetDetailView.target 属性指向下一个 TargetDetailView(如果它的位置足够近)。然而,.targets属性永远不会被初始化,因为我的 TargetDetailView 仅在按下时初始化。

我该怎么办

a) allocate memory for this object
b) refactor and/or allocate memory for this object

谢谢。

最佳答案

如果我可以提出建议,您可以使用相同的 initWithTarget 方法,但始终将目标保留在数组中。然后,您可以在那里初始化数组并从一开始就添加 Target 参数,如下所示:

@interface TargetDetailView :NSObject

@property (nonatomic, retain) NSMutableArray *targets;

- (id)initWithTarget:(Target *)target;

@end


@implementation TargetDetailView

@synthesize targets;

- (id)initWithTarget:(Target *)target {
self = [super init];
if (self) {
targets = [[NSMutableArray alloc] initWithObject:target];
}
return self;
}

然后,您可以使用 Targets 属性添加更多目标(如果您愿意)并使用简单的循环遍历目标,而不必关心其中的项目数量。

关于iphone - 初始化 NSMutableArray 的内存/设计模式/重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9041662/

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