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