2010-09-13 32 views
23

tôi đang làm điều này:Làm thế nào để thêm giá trị cho một mảng trong Objective-C

for(int i=0;i>count;i++) 
{ 
    NSArray *temp=[[NSArray alloc]initWIthObjects]i,nil]; 
    NSLog(@"%i",temp); 
} 

Nó trả về với tôi 0,1,2,3 .... đếm từng người một, nhưng tôi muốn một mảng có gắn các giá trị này {0,1,2,3,4,5 ...}. Đây không phải là một vấn đề lớn, nhưng tôi không thể tìm thấy nó. Tôi mới sử dụng iPhone.

+0

Không sử dụng thẻ br. Sử dụng nút "101010" để định dạng mã. –

Trả lời

55
NSMutableArray *myArray = [NSMutableArray array]; 

for(int i = 0; i < 10; i++) { 
    [myArray addObject:[NSNumber numberWithInt:i]]; 
} 

NSLog(@"myArray:\n%@", myArray); 
+0

Hãy chắc chắn để phát hành 'NSMutableArray' sau đó! –

+0

ah, vâng, tôi nghĩ rằng tôi cần phải đặt lời nhắc trong câu trả lời của tôi – vodkhang

+0

Nó có lẽ nên là 'i JohnK

10

Mã này không được làm những gì bạn muốn nó làm vì nhiều lý do:

  1. NSArray không phải là một lớp học "có thể thay đổi", có nghĩa là nó không được thiết kế để được sửa đổi sau khi được tạo ra. Phiên bản có thể thay đổi là NSMutableArray, phiên bản này sẽ cho phép bạn nối thêm các giá trị.

  2. Bạn không thể thêm số nguyên thủy như int vào lớp học NSArray hoặc NSMutableArray; họ chỉ giữ đồ vật. Lớp NSNumber được thiết kế cho trường hợp này.

  3. Bạn đang rò rỉ bộ nhớ mỗi lần bạn phân bổ mảng. Luôn ghép nối từng cuộc gọi đến alloc với cuộc gọi phù hợp tới release hoặc autorelease.

Mã bạn muốn là một cái gì đó như thế này:

NSMutableArray* array = [[NSMutableArray alloc] init]; 
for (int i = 0; i < count; i++) 
{ 
    NSNumber* number = [NSNumber numberWithInt:i]; // <-- autoreleased, so you don't need to release it yourself 
    [array addObject:number]; 
    NSLog(@"%i", i); 
} 
... 
[array release]; // Don't forget to release the object after you're done with it 

Lời khuyên của tôi cho bạn là đọc Cocoa Fundamentals Guide để hiểu một số điều cơ bản.

1

Một cách ngắn hơn bạn có thể làm là:

NSMutableArray *myArray = [NSMutableArray array]; 

for(int i = 0; i < 10; i++) { 

    [myArray addObject:@(i)]; 
} 

NSLog(@"myArray:\n%@", myArray); 
Các vấn đề liên quan