1.NSMutableString의 copy

결과가 어떻게 될까?

예상한대로 두 문자열의 메모리 주소는 다르다. copy했기 때문에 stringA 문자열의 복사본을 다른 메모리 주소에 만들고 그 주소를 stringB에 대입했기 때문이다.


2. NSString의 copy

결과가 어떻게 될까?

예상과 다르게 두 문자열의 메모리 주소는 같다. retain 한것과 결과가 똑같을 것이다. @"aa"의 retainCount도 2가 되었을것이다. 왜일까? 

NSString은 불변객체이기 때문에 @"aa" 라는 문자열 상수가 변경될 일이 없다. 그래서 굳이 복사본을 따로 만들어서 메모리를 낭비시키지 않고 retain과 똑같이 동작하도록 구현한 것이다.


*이해를 돕기 위해서 NSString과 NSMutableString을 예로 든것이다. 불변, 가변객체 구조를 가지고 있는 NSArray, NSMutableArray, NSDictionary, NSMutableDictionary 등도 위와 같은 메커니즘으로 동작한다.

'IOS > Objective-C' 카테고리의 다른 글

Key-Value Coding(1)  (0) 2016.12.07
Collections의 weak reference  (0) 2016.10.02
멀티 스레드 프로그램  (0) 2015.08.23
메소드의 동적 결합  (0) 2015.08.22
Property List  (0) 2015.08.20
Posted by 홍성곤
,