NSMutableArray를 NSArray로 변환하는 방법 objective-c?
답변
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으로 선언되고 할당 해제 된 변경 가능한 배열의 낭비적인 복사를 최적화 할 수있는 방법은 없습니다.