2012-08-08 103 views
0

我正在優化一個objective-c應用程序,並且在那個應用程序中有一個包含大約4000個句子的大型NSString;不要問爲什麼......但有。 它隨機選擇一個句子並返回。從一個巨大的字符串中選擇一個句子

這是代碼(I shortend的centenses):

NSString *sentences[] = {@"For crying out loud", @"Too much information", @"Tomorrow", @"Tonight", @"I don't know", @"Forever and ever ", @"Lets get high", @"Foreigner ", @"Sick"}; 

self.responses = malloc(sizeof(self.responses)/sizeof(void*)); 
memcpy(strings, self.responses, sizeof(sentences)/sizeof(void*)); 

[...] 

[self performSelector:@selector(didRecieveMessage:) withObject:self.responses[rand() % sizeof(self.responses)] afterDelay:rand() % 15 + 2]; 

現在,這需要優化。我正在考慮將這些句子包含在SQLLite Db中,並且調用數據庫來獲取隨機句子,但是有沒有更好的方法來做到這一點?例如。從text filePlist file讀取一條隨機線?如果是這樣,我該怎麼做?內存當然是最重要的方面之一。

回答

0

那麼你可以從不復制整個數組開始,佔用memcpy的兩倍。

我在這裏看到一些剪切和粘貼霧,但很明顯應該做的是使用NSArray作爲初始數組,而不是整個數組的memcpy。

除此之外,它把它放在sqlite中,並做一個查詢,你不會有所有這些東西在內存中。如果這是iOS,我肯定會將這些數據轉儲到sqlite中。任何尺寸的參考數據都不應該在內存中。

這是素數的Sqlite ....

+0

好的,謝謝。然後我會嘗試SQLLite – user1580250 2012-08-08 22:20:38

相關問題