2013-07-07 3 views
1

나는 objective-c에 익숙하지 않으며 완전히 이해하지 못한다. 왜 다음이 작동하는지. validateAcessCode 메서드에서 문자열이 변경되도록 private 메서드에서 문자열을 반환해야하는 이유는 무엇입니까? NSMutuableString이 전달 된 String과 동일한 참조를 사용하여 로컬 메서드에서 작동하기 때문입니까? 이것이 이유입니까?NSMutuableString 수정

- (void)replaceCharachters:(NSMutableString *)code { 
    [code replaceOccurrencesOfString: @"J" withString: @"a" options:0 range:NSMakeRange(0, [code length])]; 
    [code replaceOccurrencesOfString: @"H" withString: @"b" options:0 range:NSMakeRange(0, [code length])]; 
    [code replaceOccurrencesOfString: @"Y" withString: @"c" options:0 range:NSMakeRange(0, [code length])]; 
} 

-(IBAction)validateAccessCode:(id)sender { 

    NSMutableString *code = [NSMutableString stringWithFormat:@"%@", accessCode.text]; 
    [self replaceCharachters:code]; 
} 

답변

1

실제 문자열에 대한 포인터로 작업하고 있습니다. 두 방법 모두 포인터를 사용하여 메모리의 동일한 개체에 액세스합니다.

+0

좋아, 내가 자바에서 왔기 때문에. 그리고 메서드에 String을 전달하고이 메서드를 사용하면이 로컬 메서드의 범위에서 변경됩니다. 하지만 이것은 자바를 대체 할 경우 새로운 문자열 참조를 생성하기 때문에 가능합니다. – krackmoe

+1

오른쪽. Java String은 Objective-C의 NSString과 동일합니다. –

0

validateAccessCode: 방법은 아마도 텍스트 필드를 갖는 UI 객체 인 sender 호출되고있다. 이 메소드는 replaceCharachters:을 호출 할 때 필드의 텍스트를 변경하므로 아무 것도 반환 할 필요가 없습니다.