2011년 1월 20일 목요일

objective c memory manage

+ 오브젝티브시(Objective-C) 메모리 관리 기본 설명
일단 아이폰 개발자의 유명한 카페 '맥부기' 카페를 가입하고 '문씨'라는 분의 메모리 강좌를 읽는다. 내가 서점가서 아이폰, 오브젝티브시 관련 서적을 몇권 읽어봤는데 이 분의 강좌보다 못한것 같다. (이분의 강좌로 설명 때웁니다. ^ ^;)


+ 오브젝티브시(Objective-C) 메모리 관리 기본규칙

1. 함수내에서 쓰는 객체들은 전부 오토릴리즈(autorelease)로 한다.
      1. alloc init 과 release무더기면 코드만 해맨다
2. 전역 변수는 지정할때 리테인카운트를 하나 올린고 안쓸때 해제한다.
      1. 계속 가지고 있을것이니 retain, 더이상 안쓸때는 release!
3. 전역 변수에 객체를 사용하다가 해제(release)를 하면 미련없이 nil처리 (변수 = nil;)하자
      1. release하고나면 반드시 변수 = nil; 해서 이후에 실수로 접근해도 문제없다.
4. 프로퍼티는 전역 변수가 아니다!
      1. self.title과 title, 헤깔리지 말자.
5. 다른 객체에 전달하는거, 알아서 하겠지. 신경쓰지 말자.
      1. NSMutableArray같은 관리 객체에 넣어둔거 해제될때 알아서 내용도 해제 시킨다.
6. retainCount함수로 일일이 확인해보지 말자 괜히 헤깔린다.
      1. 상황에 따라 예상보다 더 나오는 경우도 있습니다 그만큼 더 해제 시킨다고 해매지 마세요.
7. 내가 만든 함수도 객체를 돌려줄땐 오토릴리즈로 돌려주자
출처: 문씨의 메모리강좌(1) http://cafe.naver.com/mcbugi/71504

나는 위의 규칙을 명확히 이해하고 난 후 오브젝티브시의 메모리관리를 이해할 수 있었다. 함수내에서 쓰는 객체들은 무조건 autorelease~! 이것만 명심해도 많은 메모리 관리 고민이 해결되었다.

+ 오브젝티브시(Objective-C) 메모리 관리에 도움되는 두가지 툴
1. 인스트루먼트(Instrument)
x-code를 쓰다보면 메인 에디터툴 말고 유용한 도구가 많이 있는데, 인스트루먼트는 메모리 누수를 체크해주고 기타 여러가지 메모리 관리를 모니터링 해준다. 인스트루먼트를 실행하면 Record 가 되면서 어플이 실행되는데 어플의 이런저런 기능을 실행하다가 누수가 발생되면 빨간 그래프로 누수 현황을 알려준다. 그림 섞은 자세한 설명은 다음 기회에..

2. Build And Analyze 기능 사용
x-code의 신기한 기능중 하나인데 x-code에서 Build > Build And Analyze 를 실행하면 메모리 누수 흐름을 화살표로 보여준다. 그래서 어디를 고쳐야 메모리 누수가 없겠구나 라는것을 짐작할 수 있다. 그림 섞인 자세한 설명은 일단 카페 검색으로..^ ^;

+ 결론
사실 메모리 관리 개념 자체가 없었던 자바 개발자로 처음 Objective-C 쓸때는, 마치 자동차의 수동변속기 다루는 것처럼 어려워했고 무서워하기도 했다. 그러나 위의 메모리 관리 이론을 알고, 메모리 관리 규칙을 알고, 메모리 관리에 도움되는 두가지 툴을 알았더니 전혀 무서울게 없었다. 오히려 메모리 관리를 내가 직접하니 뿌듯했고, 프로그램도 더 효율적으로 거듭나는것 같았다.

덧) "Apple에서 제공하는 동영상을 보고 있는데, 지금은 Optimizing 쪽을 보고 있습니다.
autorelease에 대한 내용이 있었는데, 가능하면 사용하지 말라고 하네요.
10배의 속도 차이가 있다고 합니다.편한만큼 내놓아야하는게 있나봅니다." <- 어느분의 정보?인데..이 의견이 사실인가요~? ^ ^;

댓글 없음: