// 빈 배열 생성
NSArray* arrEmptyArray = [NSArray array];
NSMutableArray* arrEmptyMutableArray = [NSMutableArray array];


// 특정 크기의 빈 배열 생성
NSMutableArray* arrEmptyMutableArrayWithCapacity = [NSMutableArray arrayWithCapacity:7];
NSMutableArray* arrEmptyMutableArrayWithCapacity2 = [[NSMutableArray alloc] initWithCapacity:7];
[arrEmptyMutableArrayWithCapacity2 release];


// 오브젝트들로 배열 생성
NSArray* arrFruits = [NSArray arrayWithObjects:@"Apple", @"Orange", @"Banana", @"Watermelon", @"Cherry", @"Strawberry", @"Pineapple", nil];


// 배열로부터 새로운 배열 생성
NSArray* arrFruitsCopy = [NSArray arrayWithArray:arrFruits];
NSArray* arrFruitsCopy2 = [[NSArray alloc] initWithArray:arrFruits];
[arrFruitsCopy2 release];
[arrEmptyMutableArray addObjectsFromArray:arrFruits];


// C 스타일 배열로부터 새로운 배열 생성
NSString* strFruits[3];
strFruits[0] = @”Apple”;
strFruits[1] = @”Orange”;
strFruits[2] = @”Banana”;

NSArray* arrFruitsFromCArray = [NSArray arrayWithObjects:strFruits count:3];
NSArray* arrFruitsFromCArray2 =  [[NSArray alloc] initWithObjects:strFruits count:3];
[arrFruitsFromCArray2 release];


// 특정 오브젝트를 포함하고 있는지 판별
BOOL bAppleExist = [arrFruits containsObject:strFruits[0]];


// 배열 길이
NSUInteger cnt = [arrFruits count];


// 특정 범위를 C 스타일 배열로 복사
id* arr;
NSRange range = NSMakeRange(1, 2);
arr = malloc(sizeof(id) * range.length);
[arrFruits getObjects:arr range:range];
free(arr);


// 마지막 원소 리턴
id* lastObj = [arrFruits lastObject];


// 특정 인덱스 위치의 원소 리턴
id* obj = [arrFruits objectAtIndex:1];


// 특정 인덱스셋에 해당되는 원소 리턴
NSArray* arrEqualIndexSet = [arrFruits objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(2, 5)]];


// 열거자 리턴
NSEnumerator* enumFruit = [arrFruits objectEnumerator];
NSEnumerator* enumFruitReverse = [arrFruits reverseObjectEnumerator];


// 특정 오브젝트의 인덱스 리턴, 오브젝트가 배열에 속하지 않은 경우 NSNotFound 리턴
NSUInteger idx = [arrFruits indexOfObject:@"Apple"];


// 지정된 범위내에 특정 오브젝트의 인덱스 리턴
idx = [arrFruits indexOfObject:@"Orange" inRange:NSMakeRange(0, 5)];


// 특정 오브젝트와 동일한 오브젝트의 인덱스 리턴
idx = [arrFruits indexOfObjectIdenticalTo:@"Banana"];


// 지정된 범위내에 특정 오브젝트와 동일한 오브젝트의 인덱스 리턴
idx = [arrFruits indexOfObjectIdenticalTo:@"Cherry" inRange:NSMakeRange(0, 5)];


// 특정 조건에 해당되는 첫번째 인덱스 리턴
ArrayTest* arrTest = [[ArrayTest alloc] init];
idx = [arrFruits indexOfObjectPassingTest:[arrTest blockTestingForTitle:@"Keyword"]];


// 배열의 모든 요소에 지정된 메시지를 보냄
[arrFruits makeObjectsPerformSelector:@selector(someSel:)];
[arrFruits makeObjectsPerformSelector:@selector(someSel:) withObject:@"arg"];


// 배열의 마지막에 새로운 오브젝트 추가
[arrEmptyMutableArray addObject:@"Apple"];


// 특정 위치에 새로운 오브젝트 추가
[arrEmptyMutableArray insertObject:@"Banana" atIndex:0];


// 특정 위치의 원소를 새로운 오브젝트로 교체
[arrEmptyMutableArray replaceObjectAtIndex:0 withObject:@"Lemon"];


// 배열에서 특정 오브젝트를 제거
[arrEmptyMutableArray removeObject:@"Cherry"];


// 배열에 존재하는 오브젝트와 일치하는 모든 오브젝트 제거
NSArray* arrDelTarget = [NSArray arrayWithObjects:@"Apple", @"Lemon"];
[arrEmptyMutableArray removeObjectsInArray:arrDelTarget];


// 배열의 특정 범위내에 존재하는 오브젝트를 제거
[arrEmptyMutableArray removeObject:@"Banana" inRange:NSMakeRange(1, 4)];


// 특정 인덱스의 요소를 제거
[arrEmptyMutableArray removeObjectAtIndex:3];


// 특정 인덱스들과 일치하는 요소를 제거
NSMutableIndexSet* indexes = [NSMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:4];
[arrEmptyMutableArray removeObjectsAtIndexes:indexes];


// 배열의 마지막 요소 제거
[arrEmptyMutableArray removeLastObject];


// 배열에서 모든 요소 제거
[arrEmptyMutableArray removeAllObjects];


// 배열 비교
BOOL isEqualArray = [arrFruits isEqualToArray:arrFruitsCopy];


// 오브젝트가 포함된 새로운 배열 리턴
NSArray* newArray = [arrFruits arrayByAddingObject:@"kiwi"];


// 기존 배열이 합쳐진 새로운 배열 리턴
NSArray* arrAnotherFruits = [NSArray arrayWithObjects:@"Peach", @"Lime", @"Lemon", nil];
NSArray* newArray2 = [arrFruits arrayByAddingObjectsFromArray:arrAnotherFruits];


// 특정 조건에 해당되는 원소들이 포함된 새로운 배열 리턴
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"fruitName contains[c] %@”, someWord];
NSArray* filteredArray = [arrFruits filteredArrayUsingPredicate:predicate];


// 특정 범위의 요소들로 이루어진 새로운 배열 리턴
NSArray* subArray = [arrFruits subarrayWithRange:NSMakeRange(2, 5)];


// 셀럭터를 이용해서 정렬된 새로운 배열 리턴
NSArray* sortedArray = [arrFruits sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];


// 배열의 모든 요소들을 지정된 문자열로 구분해 새로운 문자열 리턴
NSString* strArray = [arrFruits componentsJoinedByString:@", "];
NSLog(@”%@”, strArray);


// 배열의 모든 요소들을 프로퍼티 리스트 형식의 문자열로 리턴
NSString* strDescription = [arrFruits description];
NSLog(@”%@”, strDescription);


// 배열의 내용을 파일로 출력
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDir = [paths objectAtIndex:0];
NSString* fullPath = [documentsDir stringByAppendingPathComponent:@"filename.plist"];
[arrFruits writeToURL:[NSURL URLWithString:fullPath] atomically:YES];