Objective-C 기초

2011. 2. 16. 15:50OS/iOS

Objective-c 책한번 안보고 아이폰 개발한다고 하니.. 진행하다가 조금씩 막히는 부분이 있어서,
오늘은 "맥부기 아이폰 개발자 모임(네이버) 에서 문씨"의 강좌를 보게 되었다.
자세히 설명을 해 둔 터라 도움이 되었다.

 (울버린이냐.. 배트맨이냐???)


이부분은 문씨 강좌중에 요점 정리된 내용입니다.

1.함수내에서 쓰는 객체들은 전부 오토릴리즈(autorelease)로 한다.
 => alloc init과 release 무더기면 코드만 헤멘다.
2.전역 변수는 지정할때 리테인 카운트를 하나 올리고 안쓸때 해제한다.
 => 계속 가지고 있을 것이니 retain, 더 이상 안쓸때는 release
3.전역 변수에 객체를 사용하다가 해제(release)를 하면 미련없이 nil처리
 => nil 처리 한후 실수로 접근해도 문제없다.
4. 프로퍼티는 전역 변수가 아니다!
 => self.title 과 title, 헛갈리지 말자
5. 다른 객체에 전달하는거, 알아서 하겠지 신경쓰지 말자.
 => MSMutableArray 같은 관리 객체에 넣어둔거 해제될때 알아서 같이 해제 시킨다.
6. retainCount함수로 일일이 확인해 보지 말자 괜히 헛갈린다.
7. 내가 만든 함수도 객체를 돌려줄땐 오토릴리즈로 돌려주자.
8. 특이한 경우로 NSTimer와 같은 경우는 오토릴리즈 되어 있어도 타이머가 돌고 있는
          상태에는 시간이 지나도 해제를 안합니다.
          타이머가 정지되면 동시에 해제 되어 버립니다.
  리테인 했었으면 릴리즈 해주고 안했으면, 그냥 nil 처리 하랍니다.
   

** NSObject : NS 는 Next Step의 약어 + 객체
** -  와 + 가 함수단 앞에 붙는데 +의 경우 클래스 함수라고 하고, -는 인스턴스 함수 라고 한다.
  클래스는 원본, 인스턴스는 복사본 이라고 생각하면 되겠습니다.
  클래스도 주소가 존재하기 때문에 객체로 취급 받기도 합니다.
**객체 생성은 반드시 alloc 이라는 클래스 함수를 호출해서 원하는 객체를 찍어냄
**init은 인스턴스 함수이기 때문에 객체 생성후 최초로 객체에 호출되는 함수이다. 초기화가 제대로 되면, 자기자신의 주소를 돌려주고 , 잘못 되면,  스스로 해제를 한 후 nil을 돌려줍니다.