我是 Objective-c 和 ios 的新手,但我很好。现在我遇到了一种情况,我可以看到两种到达同一目的地的方式。我只是好奇哪种方式更适合程序的效率。如果有更好的方式来表达我还不知道的所有这些,我提前道歉。
(删除所有先前的上下文)..问题的实质是这样的:
我的第一个对象是一个可能应用了旋转变换的矩形 UIView 对象。该对象具有存储四个变换角位置的 CGPoints 的属性。
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 对象代表了矩形视图的边。这些行将存储在一个数组中。
在其他地方,有一种方法能够确定两个 Line 对象是否相交,以确定一个 rectangleView 是否与另一个相交。
- (BOOL)checkLineIntersection:lineA:lineB
问题:当调用 checkLineIntersection:lineA:lineB 时,显然需要发送两个 Line 对象。会不会更好:
- (A) 在每个 rectangleView 对象中创建和存储的线对象?
- 优点:该行已经创建并且只需要传递给方法,从而产生更快的处理
- 缺点:会使用更多内存
- (B) 在将它们发送到方法之前创建线对象。
- 优点: Line 对象不会占用内存
- 缺点:在为所有 rectangleView 对象创建边的所有循环中,在将它们发送到方法之前的处理时间更长
基本上,如果有一个比较的矩形视图(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 时设计和计算线条,并且只需要在发送它们进行交叉测试时调用它们。
谢谢你..我希望我写得足够好。