2019년 11월 7일 목요일

Objective-C NSMutableArray 활용법

오늘 포스팅 할 내용은 Objective-C 에서 주로 쓰이는 NSMutalbeArray 활용법에 대한 강좌 입니다.

NSMutableArray 는 가변 리스트 배열을 관리 하는 클래스 입니다.

NSArray 는 멤버가 초기에 고정되어 있기 때문에 추가와 삭제를 자유롭게 하려면 NSMutableArray 를 사용 하셔야 합니다.

ARC 를 사용하는 환경에서
NSMutableArray* variable = [[NSMutableArray alloc] init]; 과 같이 선언 하여 씁니다.

간단히 1부터 100까지 변수를 추가하여 값을 출력하는 코드를 만들면서 멤버를 접근 하는 방법은 operator / objectAtIndex 을 이용하는 방법을 샘플에 적용하여 만들어 보겠습니다.

NSMutableArray* arrTest = [[NSMutableArray alloc] init];
    
for (NSInteger i=0; i<100; i++)
{
    [arrTest addObject:[NSNumber numberWithInteger:i]];
}

//operator 접근.
for (NSInteger i=0; i<[arrTest count]; i++)
{
    NSLog(@"operator arrTest[%ld]=[%@]", i, arrTest[i]);
}

//objectAtIndex 지시자 접근.
for (NSInteger i=0; i<[arrTest count]; i++)
{
    NSLog(@"objectAtIndex arrTest[%ld]=[%@]", i, [arrTest objectAtIndex:i]);
}

< 위 코드는 XCode 11.2 Objective-C 에서 빌드 되었습니다 >

코드에서 염두하실것은 NSMutableArray 는 NSObject 를 상속받은 객체만을 멤버로 가질수 있습니다.
일반적인 타입의 경우 멤버로 추가될수 없기 때문에 NSInteger 의 경우도 NSNumber 객체로 변환하여 멤버로 추가 되었습니다.

​NSMutableArray 관련 상세한 인터페이스는 https://developer.apple.com/documentation/foundation/nsmutablearray?language=objc 여기서 확인 하실수 있습니다.

제가 여기서 추가로 설명하고자 하는것은 제가 자주 사용하던 패턴과 사용함에 있어 필요로 생각하는 요소들만 정리해서 안내 해드리겠습니다.

​a. addObject : ​NSMutableArray 에 순차적으로 멤버를 추가 해주는 메소드 입니다. 위 샘플에서도 확인 하실수 있듯이 멤버에 대한 순차적 추가로 쓰실수 있습니다.
b. count : ​NSMutableArray 에 저장된 멤버에 대한 갯수를 리턴해주는 메소드 입니다.
c. removeAllObjects : ​NSMutableArray 에 저장된 멤버를 모두 지우는 메소드 입니다.
d. removeObjectAtIndex : ​NSMutableArray 에 저장된 멤버중 하나 지우는 메소드 입니다.
e. insertObject : ​NSMutableArray 에 멤버를 추가 할때 순서가 아닌 특정 위치에 추가 할수 있는 메소드 입니다.
f. objectAtIndex : index 를 이용하여 위치에 해당하는 멤버를 리턴합니다.
g. setObject : index 를 이용하여 위치에 해당하는 멤버를 변경합니다.
h. removeObject:inRange : 주어진 범위의 멤버를 삭제 합니다.

위 설명된 항목들을 활용한 샘플 코드를 만들어 보겠습니다.


NSMutableArray* arrTest = [[NSMutableArray alloc] init];
    
for (NSInteger i=0; i<100; i++)
{
    [arrTest addObject:[NSNumber numberWithInteger:i]];
}

//추가된 멤버의 갯수 출력.
NSLog(@"arrTest Count : %ld", [arrTest count]);

//20번쨰 위치에 200 엠버 추가.
[arrTest insertObject:[NSNumber numberWithInt:200] atIndex:20];
NSLog(@"arrTest Count : %ld, arrTest[20]=%@", [arrTest count], [arrTest objectAtIndex:20]);

//20번째 삽입한 200 멤버 제거.
[arrTest removeObjectAtIndex:20];

NSLog(@"arrTest Count : %ld, arrTest[20]=%@", [arrTest count], [arrTest objectAtIndex:20]);
    
//50 ~ 100 멤버 삭제.
[arrTest removeObjectsInRange:(NSRange){50, 50}];

NSLog(@"arrTest Count : %ld", [arrTest count]);
for (NSInteger i=0; i<[arrTest count]; i++)
{
    NSLog(@"arrTest[%ld]=[%@]", i, arrTest[i]);
}

//전체 멤버 삭제.
[arrTest removeAllObjects];

NSLog(@"arrTest Count : %ld", [arrTest count]);

NSMutableArray 의 기능은 제가 링크를 걸은 곳에서 더 많은 기능을 확인 하실수 있습니다.

구간 삭제는 50번째 부터 50개를 지운다는 의미 입니다.

댓글 없음: