我可以使用像@"content"
这样的字符串文字,但我认为这是浪费内存。是否有针对这种情况的自定义解决方案?
我是一个新的Xcoder,所以可能这不是一个好问题,但我对使用NSString
非常困惑......
答案 0 :(得分:4)
将文本放入文件中。假设您将文件命名为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。
答案 1 :(得分:0)
我不是说其他答案都是错的,这可能就是我自己做的(从文件中加载EULA)。但是我想澄清一点,无论你将它保存在文件中还是字符串文字中,它都会使用相同数量的内存,只要你管理内存并以合理的方式创建对象图。
如果您担心内存使用情况,您仍然可以将其作为字符串文字;只需在自己的'myEula'类中将其定义为属性,将字符串文字类放在-init方法中,如果使用手动引用计数,请确保它已被释放。
然后,当您需要向用户显示协议时,创建myEula类的新实例,访问相应的属性,然后释放它,或者删除引用并让它被垃圾收集。
您也可以在用于显示EULA的视图控制器中定义它,您可能只会在内存中保留一段时间。纯粹主义者会告诉你这违反了模型 - 视图 - 控制器,但如果文本是不可变的,我认为这不是什么大问题。
它会浪费内存的唯一方法是,如果它被定义为永久保留在内存中的对象中的字符串文字,就像你的app代理一样,或者你是否一直将所有视图保存在内存中 - 但这可能意味着你有比这个字符串文字更大的问题。