2010-01-28 33 views

Trả lời

9

Phương pháp initWithCapacity của NSArray, lấy int không dấu làm đối số. Vì vậy, bất kể giá trị tối đa của một int không dấu là trên nền tảng của bạn có thể là giới hạn lý thuyết. Tuy nhiên, giới hạn thực tế có nhiều khả năng phụ thuộc vào dung lượng bộ nhớ bạn có.

+4

'NSUInteger', not' unsigned int'. Trên kiến ​​trúc 64 bit, 'unsigned int' vẫn là 4 byte, trong khi' NSUInteger' — đó là những gì NSArray sử dụng từ Leopard — là 8. –

+2

Không đúng khi giả sử rằng số lượng đối tượng tối đa NSUIntegerMax. Như jsmp chỉ ra, NSArray sử dụng NSNotFound. NSNotFound được định nghĩa là NSIntegerMax nhỏ hơn NSUInteger. Điều này ngụ ý rằng số lượng đối tượng tối đa là NSIntegerMax-1. Tôi sẽ kiểm tra điều này như Dave Delong gợi ý nhưng tôi chạy ra ngoài nếu bộ nhớ! –

+0

Hy vọng bạn có đủ RAM để lưu trữ thông tin nhiều gấp 180 lần so với Cmd. Dữ liệu! http://www.wolframalpha.com/input/?dataset=&i=(1*(2%5E64)+%2B+8+%2B+8)+bytes –

3

Có lẽ nhiều hơn RAM của bạn có thể xử lý.

1

NSArray là vùng chứa các con trỏ tới các đối tượng khác. công suất tối đa của nó được xác định bởi NSUInteger (trên các phiên bản mới nhất của HĐH có sẵn):

Khi xây dựng các ứng dụng 32-bit, NSUInteger là một 32-bit unsigned số nguyên. Một ứng dụng 64-bit xử NSUInteger như một 64-bit unsigned integer

Vì vậy, bất kể kích thước của NSUInteger là trên một thiết bị nhất định là số lượng tối đa của con trỏ đối tượng nó có thể chứa. Tuy nhiên, như Eimantas ám chỉ trong câu trả lời của mình, điều này không giống như "bao nhiêu đối tượng có thể nó giữ" bởi vì điều này phụ thuộc vào bộ nhớ có sẵn. Bạn có thể không có đủ RAM có sẵn tại một thời điểm nhất định để phân bổ một mảng với sáu tỷ vị trí ví dụ ...

5

Trong hầu hết các trường hợp liên quan đến giới hạn trên của cấu trúc lập trình và tương tự:
"Nếu bạn phải hỏi , có thể bạn đang làm sai "- TheDailyWTF.com

10

Bạn đã cố gắng tìm hiểu chưa? ;)

NSMutableArray * a = [[NSMutableArray alloc] init]; 
NSUInteger i = 0; 
@try { 
    while (1) { 
    [a addObject:@"hi"]; 
    i++; 
    } 
} @catch (NSException * e) { 
    NSLog(@"added %llu elements", i); 
} 
+0

Delong trong khi đang thử ý tưởng của bạn và tìm hiểu giới hạn kích thước , ứng dụng đó gặp sự cố và gặp lỗi khi tín hiệu Nhận được chương trình: “0”. Định dạng dữ liệu tạm thời không khả dụng, sẽ thử lại sau khi 'tiếp tục'.(Lỗi không xác định khi tải thư viện được chia sẻ "/Developer/usr/lib/libXcodeDebuggerSupport.dylib") –

+3

bạn đã hết bộ nhớ. chỉ cần đăng nhập những gì tôi đang ở mỗi lần lặp lại và để cho nó sụp đổ, nhật ký cuối cùng sẽ cho bạn biết có bao nhiêu bạn có thể nhận được. Bằng cách này, kiểm tra của bạn cho bạn biết kích thước chỉ giới hạn trong bộ nhớ. –

3

NSNotFound được định nghĩa là NSIntegerMax thay đổi (giá trị này nếu bạn đang ở trên một hệ thống 32bit hoặc 64bit)

NSNotFound cũng là kết quả bạn nhận được khi bạn làm một

[indexOfObject NSArray: obj]

và không tìm thấy đối tượng nào.

Nếu bạn không hết dung lượng/bộ nhớ, tôi sẽ nói rằng đây sẽ là giới hạn của bạn.

http://developer.apple.com/library/mac/#documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Constants/Reference/reference.html

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