在一個具有許多不同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