'IBAction'에 해당되는 글 1건

  1. 2010.07.12 [iPhone] - 시작하세요! 아이폰 3 프로그래밍 - Part 3. 기본적인 상호작용 다루기

[iPhone] - 시작하세요! 아이폰 3 프로그래밍 - Part 3. 기본적인 상호작용 다루기

iPhone/[위키북스]시작하세요! 아이폰3 프로그래밍 2010. 7. 12. 22:05

시작하세요~~~!! 아이폰3 프로그래밍 - Part3 [기본적인 상호작용 다루기]
+ 아웃렛
+ 액션

* 컨트롤러 클래스는 아웃렛 (Outlet)이라 불리는 특별한 인스턴스 변수를 사용하여 nib(xib) 파일 안의 객체를 참조 할수 있다. 아웃렛은 nib파일 내부의 객체를 가리키는 포인터라 생각하면 된다.
-- 예를 들어 인터페이스 빌더에서 텍스트 레이블 하나를 생성하였고 코드 내부에서 레이블의 텍스를 변경하려 한다고 한다면 아웃렛을 하나 선언하고 아웃렛이 레이블 객체를 가리키게 함으로써 코드상에서 아웃렛을 사용하여 레이블의 텍스트를 변경할 수 있다.

* nib 파일 안의 인터페이스 객체는 컨트롤러 클래스의 특정 메서드가 호출되도록 설정할수 있다. 이것은 액션(Action) 메서드
-- 예를 들어 사용자가 버튼을 눌렀을때 코드 안에 특정 액션 메서드가 호출될 것이라고 인터페이스 빌더에게 알려 줄수 있다.

* 아웃렛은 IBOutlet 키워드를 사용하여 선언하는 인스턴스 변수들이다.
@property (nonatomic, retain) IBOutlet UIButton *myButton;
-- IBOutlet의 목적은 인터페이스 빌더에게 이것은 nib 파일 안에 있는 객체와 연결되는 인스턴스 별수라고 알려주는 힌트를 제공하는 것뿐. 컴파일러와 관련해서는 아무 일도 하지 않는다. 인터페이스 빌더를 열었을때, 인터페이스 빌더는 프로젝트의 헤더 파일로부터 이 키워드를 검색하여 IBOutlet이 붙은 변수들을 nib 안의 객체와 연결되게끔 도와준다.

* 액션은 IBAction이라는 특별한 키워드로 선언. 이 키워드는 메서드가 액션 메서드라는 것을 인터페이스 빌더에게 알려주고, 컨트롤이 메서드를 호출하게뜸 도와준다.
-- '-(IBAction) doSomething: (id) sender; '
-- IBAction은 void 리턴 타입을 선언한 것과 같다고 할수 있다. 액션 메서드는 변수 값을 리턴하지 않는다는 말. 액션 메서드를 호출하는 버튼 컨트롤은 sender인자를 통해 자기 자신의 포인터를 넘겨준다. 이때 sender인자는 방금 눌러진 버튼의 포인터 값을 가지고 있다.
-- sender라는 이름의 변수를 하나를 인자로 취하지만 이 sender는 특별한 어떤 컨트롤을 가리키는 것은 아니다. 어떤 컨트롤이라도 이 sender를 통하여 전달 될 수 있다.

* @property / @synthesize
-- @property 선언은 구현부 파일 안의 또 @synthesize와 결합하여 컴파일러에게 게터와 세터 메서드를 컴파일 시에 생성하도록 알려준다.
-- @property (nonatomic, retain) IBOutlet UILabel *statusText;
-- 속성중 retain은 컴파일러에게 이 속성을 통해 할당한는 모든 객체에게 retain 메세지를 보내라고 알려준다. 이것은 프로터피로 선언된 인스턴스 변수가 여전히 사용되고 있는 중에는 메모리에서 삭제되는것을 막아준다. int, float혹은 다른 기본 데이터 타입을 선언할 때에는 어떠한 선택적인 속성들을 명시할 필요가 없다.
-- 속성중 nonatomic은 기본적으로 접근자와 변경자는 멀티스레드 프로그맹을 작성할 때 도움이 될 수 있는 추가적인 코드들과 함께 생성된다. 추가적인 오버헤드들은 비록 크지는 않지만 하나의 사용자 인터페이스 객체를 가리키는 포인터를 선언하는 경우에는 불필용한 것들이므로 오버헤드를 줄이기 위해 nonatomic를 선언

* IBAction sender 인자에서 부터 할당된 값 참조 - 클릭된 버튼의 제목을 얻는 코드
-- NSString *title = [sender titleForState:UIControlStateNormal];

** 자동으로 릴리지 되는 객체
-- NSString *newText = [NSString stringWithFormat:@"%@ button pressed.", title];
-- NSString 클래스의 이름과 같은 이름의 메서드를 명시하는 것은 컨비니언스 메서드나 팩토리 메서드를 호출하는 것과 같으며 이 메서드들은 자동으로 릴리즈되는 객체를 반환한다.
-- "만약 여러분이 메모리를 할당하거나 리테인 하지 않는다면 그 메모리를 릴리즈해서는 않된다."

* 델리게이트
-- 델리게이트라는 것은 다른 객체를 대신해서 책임지고 어떤한 일을 해주는 클래스를 말한다.
-- 모든 아이폰 애플리케이션은 델리케이트 메서드와 단 하나의 UIApplication 인스턴스를 가진다. UIApplication 인스턴스는 애플리케이션의 메인 루프를 책임지며 입력된 데이터를 적합한 컨트롤러 클래스에게 전달해즈는 것과 같은 애플리케이션 수준의 기능을 처리.
-- 예를 들어, 프로그램이 종료하기 직전에 동작시키려는 코드가 있다면, 애플리케이션 델리케이트 안의 ApplicationWillTerminate메서드를 구현하고 그 안에 종료 코드를 작성해야 한다.
: