我应该如何保存一个大string,就像用户协议一样?

我可以使用像@"content"string文字,但我认为这是浪费内存。 有这种情况的自定义解决scheme吗?

我是一个新的Xcoder,所以可能这不是一个好问题,但是我对使用NSString非常困惑…

把文本放在一个文件中。 假设您将文件命名为userAgreement.txt 。 确保该文件是您的目标的一部分(当您在主编辑器中打开该文件时,请检查File Inspector的“目标成员”部分)。

在运行时像这样读取文件的内容:

 NSString *path = [[NSBundle mainBundle] pathForResource:@"userAgreement" ofType:@"txt"]; NSString *userAgreement = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL]; 

这种方法的一个特点是你可以本地化文件,这个代码会自动为用户的语言环境select合适的版本。

请注意,如果您要使用自定义的最终用户许可协议(EULA),并且要将该应用程序放入App Store中,则必须在iTunes Connect的应用程序configuration中inputEULA。

我并不是说其他​​答案是错误的,而且可能是我自己做的(从文件加载EULA)。 但是我想澄清一下,无论你是将它保存在一个文件还是一个string文字中,只要你以合理的方式pipe理你的内存并创build你的对象图,它就会使用相同数量的内存。

如果你关心内存使用情况,你仍然可以把它作为一个string文字; 只需在自己的“myEula”类中将其定义为一个属性,将string字面类置于-init方法中,如果使用手动引用计数,则确保将其释放。

然后,当您需要向用户显示协议时,创buildmyEula类的新实例,访问相应的属性,然后释放它,或者删除引用并让其进行垃圾回收。

你也可以在你用来显示EULA的视图控制器中定义它,你可能只会在短时间内保存它。 纯粹主义者会告诉你,这违反了模型视图控制器,但如果文本是不可变的,我不认为这是一个大问题。

浪费内存的唯一方法是将其定义为永久保留在内存中的对象中的string字面值,如应用程序委托,或者将所有视图始终保存在内存中 – 但这样做会可能意味着你有比这一个string文字更大的问题。