在一个具有许多不同UITableView的应用程序中,我发现自己经常使用临时数组导入用于填充表视图的数据,确定行数,节数,页眉,页脚数,等等。我想知道是否因为这些数组需要为表格中的每个单元格反复创建,因此如果声明静态,所以不需要再次创建它们将有助于性能,因为现在正在创建这些数组在cellForRowAtIndexPath:
,numberOfRowsInSections:
,numberOfSectionsInTableView:,
footerForSection:`。会宣布这么多的静态数组(可能包含大量的信息,比如说几千条数据和几百个字符串),从长远来看,帮助还是伤害了我?我知道一个静态数组在应用程序生命的过程中留在内存中,那么这么多静态数组是否是有害的呢?假设这个过程在应用程序的整个过程中发生在4-5个视图控制器中,我们正在讨论这个数组的15-20个副本。这里我最好的选择是什么?谢谢静态变量和性能Objective-c
编辑:我正在使用保存值的单身人士。临时数组的真正原因是保持代码清洁。我可以这样做
dataArray = [[SingletonDataController sharedSingleton] dataArray]
objectAtIndex:CURRENTLY_SELECTED_DATA_INDEX;
然后
myTitleString = [dataArray objectAtIndex:keyTitleStringIndexKey];
,而不是分组所有到一个不可读的语句,如:
myTitleString = [[[[SingletonDataController sharedSingleton] dataArray]
objectAtIndex:CURRENTLY_SELECTED_INDEX] objectAtIndex:keyTitleStringIndexKey];
我已经完成我自己的一些测试,比较的时间它需要在静态初始化的情况下创建表视图。这些结果如下:
2012-01-29 18:31:57.539 XXXXXXX[711:707] static average: 0.058798
2012-01-29 18:31:57.543 XXXXXXX[711:707] nonstatic average: 0.058395
正如你所看到的,静态初始化实际上是比非静止的要慢,但只有一秒钟的几万分之一。这可能只是测量结果不准确的结果,但结果足以说服我说,这种差异足够小而无法解决。谜团已揭开。
而不是保持大量的副本可以保持包含数组或其他东西的缓存副本的单身?我不清楚为什么你一次又一次地创建它。它是从您的数据模型计算出来的值,而不仅仅是存储在那里的值? – user1118321 2012-01-28 15:56:31
更新的答案与解释 – 2012-01-28 16:10:14