2012-01-27 71 views
2

我有一個顯示在UIPopoverController中的視圖。之前,它只具有與單個對象的視圖關聯的屬性。因此,它會像爲NSMutableArray /設計模式/重構初始化內存

TargetDetailView : NSObject 
@property Target *target 

- (id)initWithTarget:(Target *)target 

然而現在,在這取決於什麼樣的水平放大用戶在看我們認爲某些情況下,會出現在酥料餅的多個目標。所以我給該類添加了一個NSMutableArray *targets屬性,以便在彈出窗口中顯示多個目標。

現在,在我們的視圖上繪製的實際目標對象被繪製在彼此之上,這是浪費。

initWithTarget方法只在實際點擊目標和彈出窗口時才被調用。

我現在要做的事情是提前計算,我要在同一位置有多個目標,只繪製一次,但按下時有彈出窗口顯示,這次使用NSArray *搜索目標以顯示該位置的多個目標。

我的問題是我不知道從哪裏初始化爲NSMutableArray *targets.的TargetDetailView當您按下目標只有被初始化的內存,但我想從我的其他類計算的時間提前當目標視圖上彼此頂部只繪製一次。

我在位置方面我爲了目標進行排序,然後我看看,如果前兩個是相似的足夠位置斌他們:

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 

感謝。

回答

1

如果我可以提出建議,可以使用相同的initWithTarget方法,但始終將您的目標保存在一個數組中。然後,您可以有初始化數組,並從一開始就加入你的目標參數,如:

​​

然後可以使用目標屬性來添加更多的目標(如果你想),並使用一個簡單的循環,通過目標,而不必關心那裏的物品數量。