我可以使用像@"content"
這樣的字符串,但我認爲這是浪費內存。有這種情況的自定義解決方案嗎?我應該如何保存一個大字符串,例如用戶協議?
我是一個新Xcoder,所以可能這不是一個好問題,但我很迷惑有關使用NSString
...
我可以使用像@"content"
這樣的字符串,但我認爲這是浪費內存。有這種情況的自定義解決方案嗎?我應該如何保存一個大字符串,例如用戶協議?
我是一個新Xcoder,所以可能這不是一個好問題,但我很迷惑有關使用NSString
...
把文本文件。假設你命名文件userAgreement.txt
。確保該文件是目標文件的一部分(在主編輯器中打開該文件時,請檢查File Inspector的「目標成員」部分)。
在運行時讀取該文件的內容是這樣的:
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的視圖控制器中定義它,你可能只會在短時間內保存在內存中。純粹主義者會告訴你,這違反了模型 - 視圖 - 控制器,但如果文本是不可變的,我不認爲這是一個大問題。
浪費內存的唯一方法是,如果它被定義爲永久保留在內存中的對象中的字符串字面值,就像您的應用程序委託,或者如果您始終將所有視圖保存在內存中 - - 但這可能意味着你有比這一個字符串文字更大的問題。
但是當我們使用string = @「...」時, – NewXcoder
如何包含一塊文本浪費內存?文本必須去某處...除非你有一個10MB的用戶協議,它不應該是一個問題。 – nneonneo
(但是,更好的解決方案是將文本粘貼到文件中並從中讀取文件。) – nneonneo
當您有一個值發生變化或設置在外部時,您可以使用變量(在這種情況下爲指針)。你沒有選擇。如果此值不變,請使用常量,例如@「content」。 – RileyE