2012-06-25 43 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