2012-06-25 46 views
1

我是新來的objective-c和ios,但我很順利。現在我遇到了一種情況,我可以看到到達同一目的地的兩種方式。我只是好奇哪種方式更適合程序的效率。如果有更好的措辭表達我還不知道的所有這些,我很抱歉。存儲對象數組或在需要時創建?

(去除所有先前的上下文)..事情的肉是這樣的:

我的第一個目的是,可具有施加旋轉變換爲矩形的UIView對象。該對象具有存儲四個轉換角的位置的CGPoint的屬性。

rectangularView.h 
<...> 

@property (nonatomic) CGPoint topLeft; 
@property (nonatomic) CGPoint topRight; 
@property (nonatomic) CGPoint bottomLeft; 
@property (nonatomic) CGPoint bottomRight; 

我已經創建了一個線對象:

line.h 
<...> 

@property (nonatomic) CGPoint pointA; 
@property (nonatomic) CGPoint pointB; 
@property (nonatomic) float m; // slope 
@property (nonatomic) float b; // y-intercept 

基本上,線對象表示rectangularView的側面。這些行將被存儲在一個數組中。

在其他地方有一種方法能夠確定兩個線對象是否相交以確定一個矩形視圖是否與另一個相交。

- (BOOL)checkLineIntersection:lineA:lineB 

問題: 當checkLineIntersection:LINEA:lineB被稱爲它需要明顯發兩級的對象。它會更好:

  • (A)要創建並存儲在每個矩形視圖對象中的行對象?
    • 優點:該生產線的將已被創建並且只需要被傳遞給該方法,產生更快的處理
    • 缺點:更多存儲器將利用
  • (B)創建的線之前的對象將它們發送到該方法。
    • 優點:爲所有人創造的rectangularView對象兩側的所有的循環期間將它們發送到方法
之前更多的處理時間:行對象不會佔用內存
  • 缺點

    基本上,如果有一個比較rectangularView(compView)

    [OPTION A] 
    
    for (RectangularView *rv in rectangularViewArray) { 
        BOOL doesIntersect = [self checkLineIntersection:[rv lineA] lineB:[compView lineA]]; 
        <...> 
    

    [OPTION B] 
    
    for (RectangularView *rv in rectangularViewArray) { 
        Line *lineA = [[Line alloc]..... 
        Line *lineB = [[Line alloc].... 
        <...> 
        BOOL doesIntersect = [self checkLineIntersection:[rv lineA] lineB:[compView lineA]]; 
    

    我傾向於選擇A以分裂事件之間的處理時間,這意味着該行獲得設計和創建rectangularView計算時,他們只需要在它們的交點發送到被召回測試。

    謝謝你,我希望我寫得很好。

  • 回答

    1

    你應該學會使用儀器。他們是一個非常好的工具套件,您可以查看各種指標,泄漏,堆空間,性能數字。我很想知道你應該在你的應用程序中運行一些分析,並根據你所看到的來決定。這裏很難給出明確的答案或答案。

    +0

    好點。我想現在和任何人一樣,開始瞭解這些工具。我會投這個票,但我的代表還不夠高。但是,謝謝。 – pedwards

    +0

    學習工具確實是一項值得投資的投資。有來自蘋果WWDC的優秀視頻iniTunes可以引導你。此外,如果您覺得合適,您應該能夠選擇我的答案作爲答案,而不是放棄。 – rooftop

    相關問題