2012-04-19 3 views
0

다음 코드 세그먼트에서 파싱의 차이점은 무엇입니까? 구문 분석시 세그먼트를 코딩하는 코드가 더 빠릅니까 ?NSArray 구문 분석의 다른 점은 무엇입니까?

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 

NSMutableArray *data = (NSMutableArray *)arr; 

(과)

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 

NSMutableArray *data = [NSMutableArray arrayWithArray:arr]; 
+1

당신은 실제로 여기에 무엇이든을 "구문 분석"아닙니다. 두 번째 예제는 정확함에 더 가깝지만 빈 가변 배열을 유출합니다. – Caleb

+0

... 주어진 모든 대답은 정확하고 핵심입니다. 나는 여전히 뭔가를 추가하고 싶다. 어쩌면 그것은 당신의 말씨 일 뿐이지 만 스피드에 대한 귀하의 질문에 정말 짜증이납니다 ("파싱이 빠릅니다"). 실제로 최적화해야하는 경우 측정을 위해 Instruments를 사용하고 병목 현상이되는 것만 최적화하십시오. 가정보다 측정이 훨씬 낫습니다. – Till

답변

3

당신은 당신이 개체에 대한 메모리를 할당, 두 조각에서 같은 실수를 한 다음 이전 잃게 만드는, 데이터에 대한 다른 뭔가를 할당 (및이 메모리 누출), 예 ,

  1. 첫 번째 경우에 당신이있는 NSArray 캐스팅, 나쁜 생각,하지만 당신은 그것을 수정 canot :이 :

    NSMutableArray *data = [[NSMutableArray alloc] init]; 
    data = [NSMutableArray arrayWithArray:arr]; 
    

    질문 자체에 대한 지금

    NSMutableArray *data = [NSMutableArray arrayWithArray:arr]; 
    

    해야한다 당신이 실제로 그것의 타입을 변경하지 않았을 때만 NSMutaleArray 포인터에 할당했습니다.

  2. 두 번째 경우 NSArray의 내용과 함께 변경할 수있는 새 NSMutableArray가 만들어지고 멋지다. 이제이 배열을 변경할 수 있습니다.

+0

+1 그 첫 번째 발췌 문장에서 나중에 변경할 경우 예외를 트리거합니다 변경할 NSMutableArray 변경할 수없는 NSArray 할당합니다. 감사합니다. – Till

+0

. 나는 고칠 수있어. 제 질문에 대답 해주세요. –

+0

@ Till - 네 말이 맞아, 내가 그 말을 너무 많이하고 나면 대답을 끝내기 전에. 편집 됨. – MByD

1

당신이 원하는 것은 중 하나 인 것 같습니다 :

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 
NSMutableArray *data = [arr mutableCopy]; 

나 :

NSMutableArray *data = [[NSMutableArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 
관련 문제