2009-05-08 10 views
15

Tôi có vòng lặp for. Bên trong vòng lặp đó, tôi muốn điền vào một số NSArray với một số đối tượng. Nhưng tôi không thấy bất kỳ phương pháp nào để tôi làm điều đó. Tôi biết trước có bao nhiêu đồ vật. Tôi muốn tránh một số NSMutableArray, vì một số người nói với tôi rằng đó là một chi phí rất lớn và phanh hiệu suất so với NSArray.Làm cách nào để điền vào một NSArray động?

Tôi đã có một cái gì đó như thế này:

NSArray *returnArray = [[NSArray alloc] init]; 
for (imageName in imageArray) { 
    UIImage *image = [UIImage imageNamed:imageName]; 
    //Now, here I'd like to add that image to the array... 
} 

tôi nhìn vào tài liệu cho NSArray, nhưng làm thế nào để xác định có bao nhiêu yếu tố sẽ được trong đó? Hoặc tôi có thực sự sử dụng NSMutableArray cho điều đó không?

+0

Tôi không có thời gian để tìm kiếm điều này ngay bây giờ, nhưng có lẽ bạn cần phải tạo một NSMutableArray đầu tiên, và sau đó sử dụng một phương pháp trên đó để có được phiên bản Immutable? Bạn không chắc liệu điều đó có đơn giản là sẽ cung cấp cho bạn giao diện Không thể thay đổi và không đạt được tốc độ (nghĩa là nó có thể là cùng một triển khai cơ bản như có thể thay đổi), nhưng đáng xem. Theo như tôi nhớ tài liệu của Apple rõ ràng là bùn trên này. – frankodwyer

+5

Đừng nghe những người nói với bạn rằng có điều gì đó có hiệu suất kém! NSMutableArray là một phần cốt lõi của Objective-C, nó được tối ưu hóa cao, và không có lý do gì để tránh nó! –

Trả lời

28

Có, bạn cần phải sử dụng một NSMutableArray:

int count = [imageArray count]; 
NSMutableArray *returnArray = [[NSMutableArray alloc] initWithCapacity:count]; 
for (imageName in imageArray) { 
    UIImage *image = [UIImage imageNamed:imageName]; 
    [returnArray addObject: image]; 
    ... 
} 

EDIT - Tờ khai cố định

+0

Cảm ơn. Bạn có chắc rằng cấu trúc dữ liệu của biến có kiểu NSArray và không phải là NSMutableArray không? Hoặc là những hoán đổi cho nhau? – Thanks

+0

NSMutableArray là một phân lớp của NSArray, vì vậy nó an toàn. – Alnitak

+0

Vâng, tôi quên mất. Cảm ơn! Điều đó đặt ra một câu hỏi khác;) – Thanks

3

Đây có phải là thời điểm thích hợp để sử dụng số NSMutableArray không?

Tôi biết bạn đã đề cập rằng bạn muốn tránh điều đó, nhưng đôi khi có lý do cho những việc như thế này.

4

Bạn sẽ cần sử dụng NSMutableArray cho điều đó vì việc thêm là đột biến và NSArray là không thay đổi.

Bạn có thể điền dân số NSMutableArray thành NSArray sau đó (see here for a discussion) nhưng bạn sẽ không thêm các mục vào một số cũ NSArray thông thường bất kỳ lúc nào.

2

tôi sẽ khuyên chỉ tối ưu hóa khi bạn biết NSMutableArray làm cho bạn một buổi biểu diễn hit nhưng nếu nó là, bạn luôn có thể tạo ra một aray tĩnh từ một mảng có thể thay đổi sau khi bạn đã điền nó. Nó phụ thuộc vào việc hit hiệu suất là do bạn sử dụng sau đó của NSMutableArray hoặc chỉ bằng cách tạo ra nó.

Tôi đoán rằng đây không phải là nút cổ chai hiệu suất trên ứng dụng của bạn.

+0

http://stackoverflow.com/questions/1746204/ để thảo luận về hiệu suất. – nschum