objective-c - 存储对象数组或在需要时创建?

标签 objective-c ios performance memory-management

我是 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 对象表示 rectangularView 的边。这些行将存储在一个数组中。

在其他地方有一种方法可以确定两个 Line 对象是否相交,以确定一个 rectangularView 是否与另一个相交。

- (BOOL)checkLineIntersection:lineA:lineB

问题: 当调用 checkLineIntersection:lineA:lineB 时,显然需要发送两个 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,以便在事件之间分配处理时间,这意味着在创建 rectangularView 时设计和计算线条,并且只需要在发送它们进行相交测试时调用它们。

谢谢..我希望我写得足够好。

最佳答案

你应该学会使用乐器。它们是一个非常好的工具套件,您可以查看各种指标、泄漏、堆空间、性能数字。我认为你应该在你的应用程序中运行一些分析,并根据你所看到的来决定。很难在这里给出明确的 a 或 b 答案。

关于objective-c - 存储对象数组或在需要时创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197930/

相关文章:

ios - 想要配件复选标记仅在点击右侧时显示

python - 另一个函数定义中的函数定义 - 慢?

ios - 从 tableView 部分创建图像

objective-c - 使用 block 对象而不是选择器?

ios - 我们如何根据字段内容大小增加uitableviewcell的高度

ios - Xcode 构建并运行成功,但存档失败

c# - 如何使用 Asp.NET Web Api 检测高 CPU 和长响应时间问题

java - 我如何更快地获得 MongoDB 中的等效函数? WHERE 子句?

iphone - 如何使用 iPhone SDK 为这样的图像制作动画?

objective-c - 分析器提示多线程 Cocoa 应用程序中可能存在资源泄漏