iOS

[Objective-C] 기본 클래스 NSString

빨간체리반지 2020. 8. 10. 16:31
NSString
NSString *str1 = @"hi";
NSString *str2 = @"hello";

// ------ 문자열 길이
int len = [str1 length];

// ------ 문자열 동등비교
[str1 isEqualToString: str2];

// ------ subString
NSRange range = NSMakeRange(1,4); // index 2부터 4개
NSString *str3 = [str2 substringWithRange: range];

// ------ NSString을 C로 변환
[str1 UTF8String];
// ------ C를 NSString으로 변환
NSString *str4 = [NSString stringWithCString: argv[i] encoding: NSUTF8StringEncoding];

// ------ 텍스트 파일 읽어오기
NSString *path, *text;
NSError *error;
/*
stringByExpandingTildeInPath : '~'를 포함하는 경로를 절대경로로 반환해주는 메소드
stringWithContentsOfFile : path 위치에 있는 텍스트 파일 읽어오기
*/
path = [[@"~" stringByExpandingTildeInPath] stringByAppendingString @"/sample.txt"];
text = [NSString stringWithContentsOfFile: path encoding: NSUTF8Encoding error: &error];

 

NSString 과 NSMutableString
  • NSString
    : immutable, 수정 불가능
  • NSMutableString
    : mutable, 수정 가능
NSString *firstname = "Hob";
NSString *lastname = "Han";

// i) NSString을 사용하는 경우
NSString *fullname = [NSString stringWithString:firstname];
fullname = [firstname stringByAppendingString:lastname];

// ii) NSMutableString을 사용하는 경우
NSMutableString *fullname = [NSMutableString stringWithString:firstname];
[fullname appendString:lastname];

* NSString을 사용하는 경우 fullname이 가지고 있던 메모리 데이터(firstname)에 lastname을 붙이는 것이 아니라 새로운 fullname 메모리를 할당받은 후 firstname값을 복사하고 거기에 lastname을 덧붙인 것이다. 메모리가 2개 존재하게됨..(메모리 낭비)