2ndweek introduction to iphone...

41
Introduction to iPhone OS 사운드 콘텐츠 응용_2주차 Dept. of Multimedia Science, Sookmyung Women’s University. Prof. JongWoo Lee

Upload: others

Post on 17-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Introduction to iPhone OS사운드 콘텐츠 응용_2주차

Dept. of Multimedia Science, Sookmyung Women’s University. Prof. JongWoo Lee

Page 2: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Index

• iPhone SDK

- Xcode 시작하기

- Interface Builder 시작하기

- 사용자와 상호작용하기

• Objective-C

Dept. of Multimedia Science, Sookmyung Women’s University. Prof. JongWoo Lee

Page 3: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

iPhone SDK

Page 4: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

iPhone OS

• iPhone OS의 구조

- Core OS

✓ Free BSD 기반의 UNIX 운영체제를 기반

- Core Services

✓ Core Foundation :파일 엑세스, 네트워크 소켓, 런루프에 대한 접근 제공

✓ Core Data: 데이터 베이스 엔진, SQLite형식으로 데이터를 저장✓ Address Book: 사용자의 주소록에 접근할 수 있는 API

- Media

✓ Quarts : Core Graphics, OPenGL ES, Quartz Core 가 포함✓ Core Audio: Audio Toolbox, Audio Unit, AVFoundation, OpenAL

✓ Media Player

- Cocoa Touch

✓ user application 개발에 있어 기반이 되는 기술✓ UIKit framework는 화면 표시를 담당하는 View 객체, 버튼, 슬라이더 같은 control들로 구성

Page 5: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

iPhone 개발환경

- iPhone SDK

- Xcode

애플이 제공하는 통합 개발환경(IDE, Integrated Development Environment)

- Interface Builder

사용자 인터페이스를 디자인하는 툴

- iPhone Simulator

• 개발에 필요한 도구

Page 6: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

iPhone SDK(1/2)

• iPhone SDK 설치

- 아이폰 개발자 웹 페이지 주소: http://developer.apple.com/iphone/ (계정생성필수)

- iOS 4.0으로 업그레이드 되면서 이전버전을 모두 포함한 Xcode 3.2.3버전과 iPhone SDK 4를 함께 다운받을 수 있음

- DMG 파일은 맥 OS에서 실제 디스크 이미지(MS 윈도우에서 ISO파일)

Page 7: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

iPhone SDK(2/2)

• iPhone SDK 설치

- Xcode and iPhone SDK for Snow Leopard 클릭

- 진행단계에 따라 설치

- SDK는 기본값으로 /Developer 위치에 설치됨

- 설치된 Xcode는 /Developer/Application에 위치

클릭!

Page 8: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Hello World를 띄워보자!

Xcode 시작하기Hello World를 띄워보자!

Xcode 시작하기

Page 9: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Xcode 실행하기• Xcode 실행

- /Developer/Application에 위치

- 아래의 Dock에서 finder클릭

- Macintosh HD/Developer/Applications/Xcode 클릭

- 실행 후, 바탕화면 아래의 Dock에 Xcode아이콘이 추가됨

Page 10: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Xcode - 프로젝트 생성(1/2)

• 새로운 프로젝트 생성

- File메뉴의 [New Project...]선택

가장 간단한 템플릿인

View-based Application을 선택

Page 11: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• 새로운 프로젝트 생성

- 프로젝트 이름으로 Hello World를 입력하고 원하는 폴더에 저장

Xcode - 프로젝트 생성(2/2)

Page 12: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Xcode에서의 Hello World 프로젝트 기본 윈도우

Xcode - 기본 윈도우

Groups & files 창

프로젝트 관련 설정과 프로젝트를 구성하는 자원이 이곳으로 분류

클릭하면 숨겨진 하위 항목들이 나타남

Detail View 창

Groups & files창에서 선택한 세부정보를 보여 줌

편집창

어플리케이션의 소스코드를 작성하고 수정하는 곳

Page 13: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Xcode - Groups & Files 창

Classes

OtherSources

Resources

작성한 코드가 들어가는 곳

Objective-C 클래스가 아닌 소스코드를 담는 곳프로젝트명_Prefix.pch : 헤더들을 미리 컴파일, 프로젝트를 컴파일하는 데 드는 시간을 줄이기 위함main.m : main()함수가 있는 곳, 자동으로 생성되며 수정할 필요 없음

아이콘 이미지, 소리, 동영상 파일 등

Framework

MainWindow.xib : 기본 인터페이스 빌더 파일프로젝트명ViewController.xib : 인터페이스 빌더에서 사용하는 정보를 담고 있음Info.plist : 어플리케이션의 정보를 담는 Property list

코드는 물론 이미지나 소리 파일들과 같은 자원들이 담긴 특별한 종류의 라이브러리이 폴더에 추가된 프레임워크는 어플리케이션에 링크되고, 코드에서 객체, 함수, 자원을 사용할 수 있음

• Xcode에서의 Groups & Files 창

Page 14: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• 글씨나 버튼을 코딩을 통해 만들 수 있지만 iPhone 에서는 사용자 인터페이스 디자인을 위한 특별한 툴이 있다.

• Hello world를 띄우기 위해 이제 Interface Builder로 이동해 보자!

Hello_WorldViewController.xib를

더블클릭!

Page 15: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Hello World를 띄워보자!

Interface Builder 시작하기Hello World를 띄워보자!

Interface Builder 시작하기

Page 16: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Hello_WorldViewController.xib를 더블클릭 후 첫 화면

Interface Builder 기본 윈도우

main 창 Inspector 창

다양한 사용자 인터페이스 요소들을 세팅을 조회하고 수정

Library 창

사용자 인터페이스 창에 드래그될 사용자 인터페이스(라이브러리) 컴포넌트들의 목록

View 창

사용자 레이아웃을 꾸미는 공간

Page 17: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Hello_WorldViewController.xib창 - nib파일의 메인 창

- 모든 nib파일은 File’s Owner와 First Responder라는 두 개의 아이콘으로 시작, 자동으로 생기며 지우지 못함

- File’s Owner

• 어느 nib파일에서든 첫 번째 아이콘• 디스크에서 로드된 nib 파일 객체를 나타냄

- First Responder

• 사용자가 현재 상호작용하는 객체• 예를 들어, 사용자가 현재 텍스트 필드에 데이터를 입력하는 중이라면 해당 텍스트 필드가 현재의 first responder

• 이는 사용자가 인터페이스와 상호작용할 때마다 바뀌기 때문에 현재 어떤 컨트롤이나 뷰가 first responder인지 알아내는 코드를 작성할 필요 없이 first responder와 통신할 수 있는 수단을 제공

- View 아이콘- UIView클래스의 인스턴스- 4개의 창이 열린 메인에서 제목표시줄에 View라고 적힌 창이 이 아이콘을 가리킴

Interface Builder 기본 윈도우

Page 18: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• 사용자 인터페이스를 구성하는 객체를 만들기 위해 적절한 곳!

예를 들어, 어플리케이션에 버튼을 추가하고 싶다면

- UIButton 타입의 객체 인스턴스가 필요✓ 코드 입력시,

UIButton *myButton = [[UIButton alloc] initWithFrame:aRect];

✓ Interface Builder 사용 시 인터페이스 객페 팔레트에서 메인 윈도우로 버튼을 끌어와

똑같은 작업을 할 수 있음

왜 Interface Builder를 사용해야 하는가?

버튼객체를 드래그

Page 19: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• View에 레이블 추가하기- Library 윈도우

✓ 코코아 터치 객체들의 모임✓ 항목을 라이브러리에서 nib파일 창으로 끌어놓으면 클래스 인스턴스가 어플리케이션에 추가됨

- 라이브러리 팔레트에서 Label이라는 이름의 객체를 찾아 View창으로 드래그✓ Label : 아이폰 화면에 나타나지만 사용자가 직접 수정할 수 없는 짧은 텍스트

- Label을 더블클릭하여 Hello, World! 를 입력

Interface Builder - 레이블 추가

Page 20: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Interface Builder에서 저장하기- command+s를 눌러 저장

• Xcode로 돌아가- Build/ Build and Run을 선택

- 또는 아이콘을 클릭

• iPhone Simulator가 구동되며 어플리케이션을 실행

Hello World 어플리케이션 실행하기

Page 21: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

아이폰 개발의 또다른 재미!

사용자와 상호작용 하기아이폰 개발의 또다른 재미!

사용자와 상호작용 하기

Page 22: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

상호작용과 MVC모델• 아이폰 개발의 또다른 재미!

- Hello World 어플리케이션은 코코아 터치를 이용한 아이폰 개발의 간단하고 좋은 예제이지만 결정적인 기능이 빠짐

- 그것은! 사용자와 상호작용하기

• 모델- 뷰-컨트롤러(MVC; Model-View-Controller) 패러다임- 코코아 터치를 설계한 개발자들은 MVC라는 개념에 따라 코코아 터치를 설계- GUI 기반이 어플리케이션을 구현하는 코드를 각각 특성에 맞게 분할하여 작성- 모델 Model✓ 어플리케이션의 데이터와 비지니스 로직

- 뷰 View✓ 사용자에게 데이터를 보여주고 그것을 조작하기 위한 UI 요소를 나타냄

- 컨트롤러 Controller✓ 모델과 뷰를 서로 연결하고 사용자의 입력을 어떻게 처리할지 결정하는 어플리케이션 로직

Page 23: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

그럼 이제,Hello World 프로젝트에 버튼을 생성하여

버튼에 따라 레이블이 바뀌는 액션을 추가해보자!

Page 24: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

상호작용하는 Hello World

• Hello_WorldViewController.h 파일에 다음을 추가(굵은 글씨)

- 아웃렛: IBOutlet 이라 불리는 특별한 변수 수형을 사용하여 nib 파일 안의 객체를 참조 (nib 파일 내부의 객체를 가리키는 포인터)

- 액션 메소드: IBAction 이라는 키워드로 선언 액션 메소드라는 것을 인터페이스 빌더에 알려주고 컨트롤이 이 메소드를 호출하게 도와줌

#import <UIKit/UIKit.h>

//시작//UIViewController클래스를 상속받는 Hello_WorldViewController@interface Hello_WorldViewController : UIViewController { UILabel * statusText;}// Interface Builder에 nib 파일 안에 있는 객체와 연결되는 인스턴스 변수(멤버 변수) 임을 알려줌@property (nonatomic, retain) IBOutlet UILabel *statusText;!!

// 액션 메소드 선언// Interface Builder에 이 클래스가 아래의 액션 메소드를 가지고 있다고 알려줌- (IBAction)LbuttonPressed:(id)sender;- (IBAction)RbuttonPressed:(id)sender;

//끝@end

Hello_WorldViewController.h

Page 25: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Hello_WorldViewController.m 파일에 다음을 추가(굵은 글씨)

#import "Hello_WorldViewController.h"

@implementation Hello_WorldViewController@synthesize statusText;

//왼쪽 버튼이 눌렸을 때 호출되는 액션 메소드 - (IBAction)LbuttonPressed:(id)sender {

// 버튼 레이블의 문자열을 읽어온다. NSString *title = [sender titleForState:UIControlStateNormal]; NSString *newText = [[NSString alloc] initWithFormat:@"%@ 사운드 콘텐츠 응용 입니다.", title]; statusText.text = newText;

// alloc으로 받은 문자열이므로 꼭 release로 반환해야 한다. [newText release];}//오른쪽 버튼이 눌렸을 때 호출되는 액션 메소드- (IBAction)RbuttonPressed:(id)sender { NSString *title = [sender titleForState:UIControlStateNormal]; NSString *newText = [[NSString alloc] initWithFormat:@"%@ 이종우 교수님 입니다.", title]; statusText.text = newText; [newText release];}

- (void)dealloc {! [statusText release]; [super dealloc];}

@end

상호작용하는 Hello World Hello_WorldViewController.m

Page 26: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Hello_WorldAppDelegate.h 파일 (수정할 필요 없음-기본으로 생성 됨)

#import <UIKit/UIKit.h>

@class Hello_WorldViewController;

//<UIApplicationDelegate>라는 프로토콜을 따르는 클래스 @interface Hello_WorldAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; Hello_WorldViewController *viewController;}

@property (nonatomic, retain) IBOutlet UIWindow *window;@property (nonatomic, retain) IBOutlet Hello_WorldViewController *viewController;

@end더 자세한

레퍼런스 브라우저로 이동

Delegate : 다른 객체를 대신해서 책임지고 어떠한 일을 해주는 클래스UIApplication은 UIKit 프레임워크에서 제공하는 클래스UIApplication이 하는 작업들은 감춰져 있기 때문에 대부분의 경우에는 UIApplication이 하는 일에 대해 신경쓰지 않아도 됨

상호작용하는 Hello World Hello_WorldAppDelegate.h

UIApplicationDelegate 글자 위로 option키를 누르면서 커서를 올리면 커서가 십자 모양으로 바뀌는데 그때 더블클릭을 하면 도큐멘테이션이 등장!

Page 27: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Hello_WorldAppDelegate.m 파일 (수정할 필요 없음-기본으로 생성 됨)

#import "Hello_WorldAppDelegate.h"#import "Hello_WorldViewController.h"

@implementation Hello_WorldAppDelegate

@synthesize window;@synthesize viewController;

//어플리케이션이 모든 설정 작업을 마치는 즉시 사용자와 상호작용을 시작할 준비를 하는 메소드- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch.

// Add the view controller's view to the window and display. [window addSubview:viewController.view]; [window makeKeyAndVisible];

return YES;}

- (void)dealloc { [viewController release]; [window release]; [super dealloc];}

@endXcode에서 수정한 파일을

모두 저장한 후 Interface Builder로 이동!

상호작용하는 Hello World Hello_WorldAppDelegate.m

Page 28: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Hello_WorldViewController.xib 파일 클릭- View 창에 레이블을 드래그하여 추가- Label Attributes 창을 통해 속성값 수정 가능- 만약 Attributes창이 보이지 않는다면,

command+1을 눌러 나타나게 함

상호작용하는 Hello World Hello_WorldViewController.xib

Page 29: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• 라이브러리 윈도우에서

Round Rect Button을 드래그하여

View에 가져오기

• 다음의 내용과 같이 수정하기

상호작용하는 Hello World Hello_WorldViewController.xib

이제 우리가 만든 구성 요소들이

상호간에 동작할 수 있도록 연동해 보자!

Page 30: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• File’s Owner 아이콘을 이용하여 아웃렛(IBOutlet)과 레이블 사이를 연결

• 컨트롤 키를 누른 상태에서 File’s Owner아이콘을 클릭

• 마우스 버튼을 누른 상태를 유지하며 View 창으로 끌어오면 파란 안내선이 나타나는데 레이블까지 드래그

• 레이블 위에 커서가 위치된 상태로 마우스를 놓으면 회색메뉴가 펼쳐지고 statusText를 선택

상호작용하는 Hello World Hello_WorldViewController.xib

Page 31: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• 액션 지정하기- View 창에서 “수강과목은”버튼이 클릭되있는 상태에서

command+2버튼을 눌러 connections inspector창을 연다.

- 다양한 이벤트 중 우리는 Touch Up Inside 이벤트를 사용한다.

- Touch Up Inside 오른쪽의 작은 동그라미를 클릭한채 File’s Owner 아이콘으로 드래그

- 작은 회색 메뉴가 나타나면 LbuttonPressed를 선택

- “담당교수님은” 버튼이 클릭되어 있는 상태에서 Touch Up Inside 동그라미를 클릭하여 드래그, RbuttonPressed를 선택

Touch Up Inside : 사용자의 손가락이 화면에서 떨어질 때, 떨어지기 전에 손가락이 접촉한 부분이 버튼의 안쪽이면 Touch Up Inside이벤트를 발생

상호작용하는 Hello World Hello_WorldViewController.xib

Page 32: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• Interface Builder를 저장한 후 Xcode로 돌아와 실행

버튼클릭! 버튼클릭!

상호작용하는 Hello World 완료!!

Page 33: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Objective-C

Page 34: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• 1980년대 과학자이자 소프트웨어 엔지니어인 브래드 콕스가 개발

• C프로그래밍 환경에 스몰토크의 특징을 도입하는 방식으로 디자인

• iPhone Framework Library의 대부분은 Objective-C로 작성됐지만 C언어도 수용할 수 있게 디자인되어 C/C++도 사용가능

• 자바, C#과 같은 많은 언어들이 Objective-C언어를 차용

Objective-C란?

• 확장자.h 헤더파일, class의 interface 정의

.m C, Objective-C코드로 implementation

.mm Objective-C에서 C++클래스를 호출하는 경우에 사용

Page 35: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

• 메시징- 메소드는 전통적인 방식처럼 호출되는 것이 아니라 객체에 메시지를 보내는 형식- 다른 언어에서 오브젝트명.메소드명 이 [오브젝트 메소드]괄호에 둘러쌓이고 스페 이스로 구분하는 형식

- 파라미터를 가지는 경우; [오브젝트 메소드:파라미터]로 사용 예) [object method]; [object methodWithInput:input];

리턴값이 있는 경우 output = [object methodWithOutput] output = [object methodWithInputAndOutput:input];

- 클래스 메소드도 같은 문법으로 호출 가능 예) id myObject = [NSString string]; (id 타입이란? myObject가 어떤 오브젝트의 참조도 될 수 있다는 뜻)

같은 표현으로, NSString* myString = [NSString string]; (모든 Objective-C의 변소들은 포인터 타입이므로 *를 붙일 필요가 없음)

- myWidget 객체에 PowerOn이라는 메시지를 보내는 방법 예)

Objective-C returnValue = [myWidget powerOn];C++ returnValue = myWidget -> PowerOn();C returnValue = widget_powerOn(myWidget);

Objective-C의 특징

Page 36: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Objective-C의 특징

• 접근자- Objective-C의 모든 인스턴스 변수들은 Private- 즉, 접근자를 사용하여 엑세스해야 함- 일반적인 문법

예) [photo setCaption:@”Day at the Beach”]; output = [photo caption]; //인스턴스 변수를 직접 읽는 다는 뜻이 아니라 caption이라는 메소드를 부르고 있는 것 Objective-C에서는 일반적으로 getter 메소드에 get을 붙이지 않고 사용

- .(dot)을 이용한 문법 .(dot)은 접근자(getter and setter)를 위해 Objective-C 2.0에 새로 추가된 문법 예) photo.caption = @”Day at the Beach”; output = photo.caption;

• 전처리기 선언 Import- #include 대신 #import문을 사용

Page 37: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Objective-C의 특징

• String- c의 String을 그대로 사용 가능- 그러나 대부분의 Objective-C framework에서는 NSString이라는 독자적인 클래스 사용- “더블 쿼테이션 앞에 @만 붙여줌으로써 생성 가능

예) NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];  // Create an Objective-C string from a C string NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];

• 프로퍼티 property 선언- 인스턴스 변수와 메소드 사이의 매개체 역할

- interface 안에 메소드와 같이 정의 예) @property (nonatomic, retain) IBOutlet UILabel *statusText;! nonatomic - 쉽게 멀티스레드를 위한 코드를 삽입하지 않아 오버헤드를 줄임 retain - Objective-C의 독특한 메모리 관리 기법 중 하나

- implementation 파일에 @synthesize statusText;와 같은 선언을 하면 컴파일러에 의해 메 소드가 자동 생성됨

Page 38: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Objective-C의 특징

@interface MyClass : NSObject //인터페이스 정의 시작{

int count;id data;NSString* name;

}

- (id)initWithString : (NSString*)aName;+ (MyClass*)createMyClassWithString:(NSString*)aName;

@end //인터페이스 정의 끝

클래스명 슈퍼 클래스명

멤버변수 정의

메소드 정의

• 클래스 선언(.h)

클래스의 interface는 .h에 정의.m에 implementation

+메소드(클래스 메소드)- 메소드(인스턴스 메소드)

• 클래스 implementation(.m)@implementation MyClass-(id)initWithString:(NSString *)aName;{

if(self = [super init]){name = [aName copy];

}return self;

}+ (MyClass*)createMyClassWithString:(NSString*)aName;{

return [[[self alloc] initWithString:aName] autorelease];}@end

Page 39: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

Objective-C의 특징• 메소드 정의 방법

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index

리턴 타입

메소드 타입식별자 파라미터 타입

파라미터 명메소드식별자 명

- 호출하는 예 [myArray insertObject:anObject atIndex:0];

- 괄호 안에 괄호를 넣는 방법([ [] ]) 쓸모없는 임시 변수를 선언하지 않게 메소드의 리턴값을 파라미터로 직접 넘길 수 있음 [[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];

- .(도트)를 사용하는 방법 accessor methods(단순히 클래스 멤버에 엑세스 하기 위해 만들어진 메소드, getter or setter)를 호출할 때 사용 [myAppObject.theArray insertObject:[myAppObject objectToInsert] atIndex:0]; 위의 방법은 다음과 같이 사용 myAppObject.theArray = aNewArray;

Page 40: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

알아두면 좋은 맥 단축키• 단축키

- command + space bar 한영변환

- command + s 저장

- command + a 전체선택, command + c 복사, command + v 붙여넣기

Page 41: 2ndWeek Introduction to iPhone OSmm.sookmyung.ac.kr/~bigrain/class/2010/sound2/2ndWeek...•Hello_WorldViewController.xib창 - nib파일의 메인 창-모든 nib파일은 File’s

과제• iPhone OS 개발환경 구축 및 Hello World 프로젝트 수정