아이폰어플개발정보2010. 6. 22. 09:54
[Objective-C] 아웃렛

아웃렛은 IBOutlet 키워드를 사용하여 선언하는 인스턴스 변수이다.

컨트롤러 헤더 파일에서 다음과 같이 아웃렛을 선언한다.

@property (nonatomic, retain) IBOutlet UIButton *myButton;

IBOutlet은 컴파일러와 관련하여 아무일도 하지 않는다.  단지 IBOutlet의 목적은 인터페이스 빌더에게 xib(혹은 nib)파일 안의 객체와 연결되는 인스턴스 변수라고 알려주는 힌트를 제공하는 것 뿐이다.

IBOutlet은 전처리문으로 정의되어 있어 이것은 빌드타임에 전처리기에 번역되어 결과는 컴파일러에게 넘겨지게 된다. 다라서 컴파일러는 실제 코드상에서 IBOutlet을 볼 수 없다.

이러한 이유 때문에 인터페이스 빌더 객체와 연결을 원하는 모든 인스턴스 변수 앞에는 반드시 IBOutlet 키워드를 붙여야 한다.

인터페이스 빌더를 열었을때, 인터페이스 빌더는 프로젝트 헤더 파일들로부터 이 키워드를 검색하며 IBOutlet 키워드가 붙은 변수들은 내부 객체와 연결되게끔 도와준다.

nonatomic

멀티쓰레드 환경이 아닌 경우 nonatomic 속성을 지정해서 퍼포먼스를 조금 향상 시킬 수 있다고 한다.

일반적으로 유저인터페이스(UIKit Framework)의 객체에 접근 할 경우 nonatomic 속성을 지정한다.

nonatomic 속성을 지정하지 않으면 디폴트로 멀티쓰레드에서 안전한 접근자(accessors, mutators) 메소드를 컴파일시 생성.

retain

컴파일러에게 이 속성을 통해 할당하는 모든 객체에 retain메세지를 보내게 한다.


이전에는 다음과 같이 IBOutlet을 사용하였다.

IBOutlet UIButton *myButton;

이후 애플에서 제공하는 샘플코드에는 아래처럼 프로퍼티 선언의 다음으로 옮겨졌다.

@property (nonatomic, retain)IBOutlet UIButton *myButton;

두가지 방법 모두 허용되는 방법이며 어떠한 방법을 쓰더라도 큰 차이 없이 동일하게 동작한다.

한가지 차이점이 있다면 인스턴스 변수에 내포되어 있는 이름과 달리 다른 이름의 프로퍼티를 선언하였을경우 반드시 IBOutlet 키워드를 프로퍼티 뒤에 붙여야 정상적인 작동을 한다.



출처 : http://blog.naver.com/PostView.nhn?blogId=khagaa&logNo=30085425642
Posted by 오늘마감

댓글을 달아 주세요