我应该如何存储大量的字符串,如用户协议? [关闭](How should I store a l

2019-10-17 08:00发布

我可以用一个字符串像@"content" ,但我认为这是浪费内存。 是否有这种情况定制的解决方案?

我是一个新Xcoder,所以可能这不是一个好问题,但我很迷惑对使用NSString ...

Answer 1:

放在一个文件中的文本。 比方说,你命名该文件userAgreement.txt 。 请确保该文件是你的目标的一部分(检查文件检查器的目标籍部分,而你必须在主编辑器中打开该文件)。

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

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

这种方法的特点是可以本地化的文件,该代码会自动拾取用户的语言环境的相应版本。

需要注意的是,如果你想使用自定义的最终用户许可协议(EULA),并希望把这个应用程序在App Store,你必须在iTunes Connect应用程式设定进入EULA。



Answer 2:

我不是说其他​​的答案是错误的,它可能是什么,我会做我自己(从文件加载的EULA)。 但我想澄清的是,无论你把它放在一个文件或者一个字符串,它会使用相同的内存量,只要你管理你的记忆,并以合理的方式创建对象图。

如果你担心内存使用情况,你仍然可以把它一个字符串; 刚刚在自己的“myEula”类将其定义为一个属性,把字符串常量类的-init方法,如果你使用手动引用计数确保它得到释放。

然后,当你需要向用户显示该协议,创建myEula类的新实例,访问相应的属性,然后松开,或删除引用和让它得到垃圾收集。

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

它会浪费内存的唯一方法是,如果它被定义为一个字符串,在内存永久停留,喜欢你的应用程序代理,或者如果你保持你的视图内存中的所有时间对象文本 - 但是这将可能意味着你必须比这个字符串字面量更大的问题。



文章来源: How should I store a large string, like a user agreement? [closed]