2011-06-26 31 views
31

Chuỗi có kích thước tối đa có thể được giữ trong đối tượng NSString là gì?Độ dài tối đa của đối tượng NSString là bao nhiêu?

Điều này có thay đổi động không?

+2

Nó có thể chứa rất nhiều. Tại sao? –

+0

Tôi đã chỉnh sửa bài đăng của bạn. Tôi chỉ không chắc chắn những gì có nghĩa là "động?", Vì vậy câu hỏi cuối cùng có thể không phản ánh ý định hiện tại. –

+1

Nó chắc chắn có thể giữ nhiều hơn so với RAM có sẵn trên bất kỳ iPhone hoặc iPad. Nói cách khác, bạn không thể nhấn giới hạn của NSString trên các thiết bị iOS hiện tại, nhưng bạn có thể hết bộ nhớ. – Costique

Trả lời

60

Tôi giả định giới hạn cứng cho NSString sẽ là các ký tự NSUIntegerMax, vì chỉ mục của NSString và các phương thức liên quan đến kích thước trả về NSUInteger. Vì tất cả các thiết bị hiện có khả năng chạy iOS là 32 bit, điều này có nghĩa là NSUIntegerMax là 2^32 - 1 và NSString có thể chứa hơn 4,2 tỷ ký tự.

Như những người khác đã chỉ ra, tuy nhiên, giới hạn thực tế nhỏ hơn nhiều - đặc biệt trên thiết bị iOS, bạn sẽ hết bộ nhớ trước khi bạn đạt đến giới hạn cứng trong NSString.

+3

Tôi đã +1. Tuy nhiên, điều này là thiếu sót ở chỗ nó giả định 1 ký tự = 1 byte. –

+0

Không thể 'NSUIntegerMax' _plus_' 1' - sau đó 'độ dài' sẽ không thể trả lại giá trị chính xác ở một đầu hoặc khác trong phạm vi. –

+0

@pst - Tôi đã cố gắng cẩn thận và chỉ đề cập đến các ký tự chứ không phải là byte. @Josh - Bạn đúng. Tôi sẽ chỉnh sửa câu trả lời của mình. –

8

NSString thực sự là một nhóm lớp, vì vậy rất có thể là các lớp bê tông khác nhau (ví dụ: NSStringNSMutableString) sẽ làm cho chúng tôi "các cửa hàng sao lưu" khác nhau để lưu trữ dữ liệu. Bạn thậm chí có thể phân lớp NSString và cung cấp triển khai cửa hàng sao lưu của riêng bạn, cho các nhu cầu cụ thể mà bạn có thể có (xem "Subclassing Notes" for NSString).

Khi cửa hàng sao lưu thực sự được sử dụng bởi NSString, đây là chi tiết triển khai không được tài liệu của Apple và có thể thay đổi bất kỳ lúc nào.

Đối với bản thân mình, tôi giả định rằng độ dài tối đa của NSString chỉ bị giới hạn bởi bộ nhớ khả dụng. Trên thực tế, kể từ khi bộ nhớ có sẵn có thể thực sự lớn, sẽ có một số giới hạn khác (có thể là một hiệu suất liên quan đến một), nhưng tôi chưa bao giờ phát sinh trong giới hạn như vậy.

+1

Thuộc tính độ dài là NSUInteger, vì vậy bất kể nhóm lớp nào sẽ là giá trị tối đa có thể. Nó cũng chấp nhận một đối tượng NSData trong khi khởi tạo cũng có một NSUInteger cho thuộc tính length của nó. NSUInteger là 32 bit trên iOS và 64 bit trên OS X. Tôi đã làm việc thành công với các chuỗi lớn hơn 4GB trên OS X. –

3

Nó có thể chứa gần như nhiều bộ nhớ có thể được đại diện bởi hệ thống bộ nhớ ảo. Nhưng cá nhân tôi cảm thấy độ dài tối đa chỉ bị giới hạn ở bất kỳ bộ nhớ nào có sẵn tại thời điểm đó.

Các vấn đề liên quan