Какова максимальная длина объекта NSString? - PullRequest
32 голосов
/ 26 июня 2011

Какова строка максимального размера, которая может храниться в объекте NSString?

Это изменяется динамически?

Ответы [ 3 ]

62 голосов
/ 26 июня 2011

Я бы предположил, что жестким ограничением для NSString будут символы NSUIntegerMax, поскольку методы индекса и размера NSString возвращают NSUInteger.Поскольку все устройства, которые в настоящее время поддерживают iOS, являются 32-разрядными, это означает, что NSUIntegerMax равен 2 ^ 32 - 1, а NSString может содержать чуть более 4,2 миллиарда символов.

Как указали другие, практическое ограничениенамного меньше - особенно на устройстве iOS, вам не хватит памяти задолго до того, как вы достигнете какого-либо жесткого ограничения в NSString.

8 голосов
/ 26 июня 2011

NSString на самом деле является кластером классов, поэтому весьма вероятно, что различные конкретные классы (скажем, NSString против NSMutableString) сделают нас различными «резервными хранилищами» для хранения данных. Вы можете даже создать подкласс NSString и предоставить собственную реализацию хранилища резервных копий для конкретных нужд, которые могут у вас возникнуть (см. «Примечания по подклассам» для NSString ).

Что касается того, какое хранилище данных фактически используется NSString, это подробности реализации, которые не задокументированы Apple, и могут измениться в любое время.

Для себя я предполагаю, что максимальная длина NSString ограничена только доступной памятью. На самом деле, поскольку доступная память может быть очень большой, будут некоторые другие ограничения (возможно, связанные с производительностью), но я никогда не брался за такое ограничение.

3 голосов
/ 26 июня 2011

Он может содержать почти столько же памяти, сколько может представить система виртуальной памяти.Но я лично считаю, что максимальная длина ограничена только доступной памятью в то время.

...