1

私はobjective-cとiosを初めて使用しますが、順調に進んでいます。今、私は同じ目的地に到着する2つの方法を見ることができる状況に遭遇しました。どちらの方法がプログラムの効率に適しているかについて、私はただ興味があります。私がまだ知らないこれらすべてを言い表すより良い方法があるならば、私は前もって謝罪します。

(以前のコンテキストをすべて削除します)。問題の要点は次のとおりです。

私の最初のオブジェクトは、回転変換が適用されている可能性のある長方形のUIViewオブジェクトです。このオブジェクトには、変換された4つのコーナーの位置のCGPointを格納するプロパティがあります。

rectangularView.h
<...>

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

Lineオブジェクトを作成しました:

line.h
<...>

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

基本的に、LineオブジェクトはrectangularViewの側面を表します。これらの行は配列に格納されます。

他の場所には、1つのrectangularViewが別のRectangularViewと交差するかどうかを判断するために、2つのLineオブジェクトが交差するかどうかを判断できるメソッドがあります。

- (BOOL)checkLineIntersection:lineA:lineB

質問:checkLineIntersection:lineA:lineBが呼び出されると、明らかに2つのLineオブジェクトを送信する必要があります。それはより良いでしょうか:

  • (A)各rectangularViewオブジェクト内に作成および保存されるラインオブジェクト?
    • 長所:行はすでに作成されており、メソッドに渡すだけで、処理が高速になります
    • 短所:より多くのメモリが使用されます
  • (B)メソッドに送信する直前にラインオブジェクトを作成します。
    • 長所:Lineオブジェクトはメモリを消費しません
    • 短所:メソッドに送信する前に、すべての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に傾倒しています。つまり、rectangleViewが作成されたときに線が設計および計算され、交差テストに送信されたときにのみ呼び出す必要があります。

ありがとう..そして私はこれを十分に書き留めたことを望みます。

4

1 に答える 1

1

あなたは楽器の使い方を学ぶべきです。これらは非常に優れたツールスイートであり、あらゆる種類のメトリック、リーク、ヒープスペース、パフォーマンスの数値を確認できます。アプリケーションでプロファイリングを実行し、表示内容に基づいてプロファイリングから決定する必要があると思います。ここで決定的なaまたはbの答えを出すのは難しいです。

于 2012-06-25T23:38:38.690 に答える