从巨大的字符串中选择一个句子

时间:2012-08-08 22:10:36

标签: objective-c ios memory-management nsstring nsarray

我正在优化一个objective-c应用程序,并且在该应用程序中有一个包含大约4000个句子的大型NSString;不要问为什么......但是有。 它随机选择一个句子并将其返回。

这是代码(我缩短了中心):

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中包含句子并调用DB来获取随机句子,但有没有更好的方法来做到这一点?例如。从text filePlist file读取随机行?如果是这样,我该怎么做? 记忆当然是最重要的方面之一。

1 个答案:

答案 0 :(得分:0)

嗯,你可以从不复制整个阵列开始,用memcpy占用两倍的内存。

我在这里看到了一些剪切和粘贴雾,但很明显应该做的是使用NSArray作为初始数组而不是整个数组的memcpy。

除了把它放在sqlite中并进行查询,你不会在内存中拥有所有这些东西。如果这是iOS,我肯定会将这些数据转储到sqlite中。大小不应该在内存中的任何类型的ref数据。

这是Sqlite的主要内容......