[IPhone 09.03]08. 문자열의 메모리 해제와 관련해서 도움되는 것

2010. 9. 3. 12:38IPhone/Basic


1. NSString에서 initWith의 이름으로 가지는 메소드들은 인자로 받은 객체의 레퍼런스 카운트를 하나 증가시킨다.

  복사를 하는 것이 아니라 참조만 한다는 것을 말한다. initWith 계열의 메소드는 메모리가 할당(alloc)된 객체에 의해서만 가능한데 바꾸어 이야기하면 alloc를 호출했기 때문에 레퍼런스 카운트가 증가하고, 사용하지 않을 때에는 메모리의 해제(release)를 직접 해주어야 한다.

2. NSString에서 stringWith의 이름을 가지는 메소드들은 인자를 받은 객체를 복사하고 NSAutoreleasePool에 등록한다.

  객체를 만든쪽에서는 해제(release)를 해주지 않아도 된다. 이 메소드는 alloc을 호출하지 않고 [NSString stringWithFormat:stringArg]이런식으로 객체를 생성하는 것이 가능하다. 이렇게 사용자가 alloc을 명시적으로 후출하지 않기 때문에 메모리의 해제도 명시적으로 할 필요가 없다 AutoreleasePool을 이용한 메모리 해제는 나중에 메모리 풀을 해제할 때 같이 해제하기 때문이다. 참고로 stringWith 계열의 함수들과 같이 사용자가 메모리 해제를 신경 쓰지 않고 autoreleasePool을 이용하도록 하는 함수를 Convenience Method라고 한다.

3. 코드에서 @"Hello"같이 문자열은 직접쓴 객체가 아니므로 해제할 필요가 없다.

  initWithString 메소드를 이용해서 객체를 만들더라도 문자열로 만든 NSString객체는 해제할 필요 없다.

'IPhone > Basic' 카테고리의 다른 글

[IPhone 09.03]09. 타이머 and Label  (0) 2010.09.03
[IPhone 09.01]07. 설정값 저장하기  (0) 2010.09.01
[IPhone 09.01]06. About of View  (0) 2010.09.01
[IPhone 09.01]05. Touch  (0) 2010.09.01
[IPhone 09.01]04. TableView  (0) 2010.09.01