NSMutableArray를 NSArray로 어떻게 변환합니까?
objective-c 에서 NSMutableArray를 NSArray로 변환하는 방법은 무엇입니까?
NSArray *array = [mutableArray copy];
Copy
불변 사본을 만듭니다. Apple이 다양한 최적화를 할 수 있기 때문에 이것은 매우 유용합니다. 예를 들어 copy
불변 배열로 전송 하면 객체 만 유지되고을 반환합니다 self
.
가비지 수집 또는 ARC를 사용하지 않으면 -copy
객체 를 유지 한다는 것을 기억하십시오 .
의 NSMutableArray
하위 클래스 NSArray
이므로 항상 변환 할 필요는 없지만 배열을 수정할 수 없도록 NSArray
하려면 자동 릴리스 여부에 따라 다음 방법 중 하나를 만들 수 있습니다 .
/* Not autoreleased */
NSArray *array = [[NSArray alloc] initWithArray:mutableArray];
/* Autoreleased array */
NSArray *array = [NSArray arrayWithArray:mutableArray];
편집 : Georg Schölly가 제공하는 솔루션 은 더 나은 방법이며 훨씬 깨끗합니다. 특히 ARC가 있고 자동 릴리스를 호출 할 필요가 없기 때문에 더욱 그렇습니다.
나는 두 가지 주요 솔루션을 모두 좋아합니다.
NSArray *array = [NSArray arrayWithArray:mutableArray];
또는
NSArray *array = [mutableArray copy];
주요 차이점 내가 그들에 볼이 mutableArray가 nil 일 때 행동하는 방법입니다 :
NSMutableArray *mutableArray = nil;
NSArray *array = [NSArray arrayWithArray:mutableArray];
// array == @[] (empty array)
NSMutableArray *mutableArray = nil;
NSArray *array = [mutableArray copy];
// array == nil
이 코드를 사용해보십시오 ---
NSMutableArray *myMutableArray = [myArray mutableCopy];
과
NSArray *myArray = [myMutableArray copy];
목표 -C
다음은 NSMutableArray를 NSArray로 변환하는 방법입니다.
//oldArray is having NSMutableArray data-type.
//Using Init with Array method.
NSArray *newArray1 = [[NSArray alloc]initWithArray:oldArray];
//Make copy of array
NSArray *newArray2 = [oldArray copy];
//Make mutablecopy of array
NSArray *newArray3 = [oldArray mutableCopy];
//Directly stored NSMutableArray to NSArray.
NSArray *newArray4 = oldArray;
빠른
Swift 3.0에는 새로운 데이터 유형 인 Array가 있습니다. let
키워드를 사용하여 배열을 선언 하면 NSArray 가되고 var
키워드를 사용하여 선언하면 NSMutableArray가 됩니다.
샘플 코드 :
let newArray = oldArray as Array
objective-c에서 :
NSArray *myArray = [myMutableArray copy];
신속하게 :
var arr = myMutableArray as NSArray
NSArray *array = mutableArray;
이 [mutableArray copy]
반 패턴은 모든 샘플 코드에 적용됩니다. 과도하고 현재 범위의 끝에서 할당이 취소되는 가변형 가변 어레이의 경우에는 중지하십시오.
런타임에서 범위를 벗어나려고하고 0으로 선언되고 할당 해제 된 변경 가능한 배열의 낭비적인 복사를 최적화 할 수있는 방법은 없습니다.
가변성을 통해 배열을 생성 한 다음 불변 버전을 반환하려는 경우 상속을 통해 가변 배열을 "NSArray"로 간단히 반환 할 수 있습니다.
- (NSArray *)arrayOfStrings {
NSMutableArray *mutableArray = [NSMutableArray array];
mutableArray[0] = @"foo";
mutableArray[1] = @"bar";
return mutableArray;
}
(기술적으로 여전히 변경 가능한) 반환 객체를 불변의 NSArray로 취급하기 위해 호출자를 "신뢰"하는 경우이 방법이보다 저렴 [mutableArray copy]
합니다.
수신 된 오브젝트를 변경할 수 있는지 여부를 판별하려면 메시지 수신자는 공식적인 리턴 값 유형에 의존해야합니다. 예를 들어 불변으로 입력 된 배열 객체를 받으면이를 변경 하지 않아야합니다 . 클래스 멤버쉽을 기반으로 객체가 변경 가능한지 여부를 결정하는 것은 허용되는 프로그래밍 방식이 아닙니다.
위의 연습은 여기에서 더 자세히 설명됩니다.
모범 사례 : 반환 유형이 NSArray 인 경우 mutableArray.copy 또는 mutableArray를 반환합니다.
나는 신속한 3의 답을 찾고 있었고이 질문은 검색의 첫 번째 결과로 나타 났으며 나는 그것에 대한 답을 얻었으므로 여기에는 신속한 3 코드가 있습니다.
let array: [String] = nsMutableArrayObject.copy() as! [String]
참고 URL : https://stackoverflow.com/questions/1768937/how-do-i-convert-nsmutablearray-to-nsarray
'development' 카테고리의 다른 글
Java 가져 오기 명령문에 와일드 카드를 사용하는 이유가 무엇입니까? (0) | 2020.02.26 |
---|---|
기존 테이블에서 열을 제거하는 방법? (0) | 2020.02.26 |
변수가 파이썬에 정의되어 있는지 확인 (0) | 2020.02.26 |
알파벳순으로 NSArray를 정렬하는 방법은 무엇입니까? (0) | 2020.02.26 |
조각의 Android 옵션 메뉴 (0) | 2020.02.26 |