* 예외처리
- Objective-C의 예외처리를 위한 예약어
@try: Exceptions이 던져질 수 있는 block을 정의한다
@throw: Exception object를 던진다
@catch(): @try bolck안에서 던져진 exception을 catch한
@finally: @try block에서 Exceptions가 던져지던 아니던 수행되어질 block code를 정의한다
- 모두 NSException.h에 정의되어 있다
* NSAssert
- 특정 조건을 만족하지 않는 경우 NSInternalInconsistencyException예외를 발생시켜 프로그램을 강제로 중단시키는 매크로함수
- 사용방법 : NSAssert(만족해야 하는 조건, 출력할 문장);
* 에러 처리
- 에러가 발생하면 메서드나 함수의 리턴 값 형태로 에러의 발생을 리턴한다. 파일 처리에는 이러한 에러 처리를 위한 객체를 대입하도록 되어 있다. 이 경우 에러 처리에 관련된 오브젝트를 대입하면 에러가 발생해도 프로그램이 중단되지 않고 적절한 메시지를 출력하도록 할 수 있다
- NSError : NSError.h 파일에 정의되어 있는 클래스로 에러에 대한 정보를 저장할 수 있는 클래스
* 생성자
+(id)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dic
* 멤버 프로퍼티
(NSString *)domain: 에러와 관련된 기술 요소 (Cocoa, Unix…)
(NSInteger)code: 에러에 관련된 정수 값
(NSDictionary *)userInfo: 에러에 관련된 정보를 저장할 사전
* 멤버 메서드
(NSString *)localizedDescription: 에러를 설명하는 문자열로 domain과 code 출력
(NSString *)localizedFailureReason: 에러의 발생 원인
(NSString *)localizedRecoverySuggestion: 에러의 대처 방법
* XCode 화면 설정
- [X-Code] – [Preference] 메뉴를 이용
- [All – In – One]: 빌드, 디버깅, 검색 등이 모두 하나의 창에서 실행
- [Condensed]: 파일 창, 편집 창, 디버깅 창 등이 모두 분리되어서 실행
- [Default]: 그룹 및 파일 창, 편집 창 등은 통합되어 있고 디버깅 창, GDB 콘솔 등의 일부 창은 분리된 상태에서 실행
* Break Point
- Break Point 설정 : 원하는 지점을 선택하고 마우스 오른쪽을 클릭해서 Add BreakPoint
- Break Point 삭제 : Break Point를 선택하고 마우스 오른쪽을 클릭해서 remove BreakPoint
- Break Point 까지 실행 후 옵션
Continue: 코드를 계속 실행
Step Over: 코드 다음 행으로 이동
Step Into - 코드가 다른 메서드를 호출하는 경우 메서드 안으로 진입
Step out - 현재 메서드를 빠져 나가서 호출하는 메서드로 이동
- Break Point에 소리 설정하기 : 마우스 오른쪽을 클릭한 후 [Built-In BreakPoints] – [Sound out and auto-continue]
- Break Point에 동작 지정하기
Break Point에서 오른쪽의 + 버튼을 눌러서 동작 지정 가능
[Log]: 콘솔에 로그를 남기
[Sound]: 시스템에 내장된 소리를 재생
[Shell Command]: 셀 명령 실행
[Debugger Command]: GDB 명령을 남김
* Watch Point
- 변수의 값이 변경되는 경우를 감시하고자 하는 경우에 사용하는 기능. 이 포인트를 설정해두면 변수의 값이 변경되면 실행이 자동적으로 멈추게 된다
- 디버거 창의 Variable 항목에서 선택할 수 있으며, 변수를 선택하고 마우스 오른쪽 메뉴를 눌러서 Watch Variable를 선택
* Instruments
- 실행 중인 프로그램의 동작 상태를 감시하고 분석하는 데 사용되는 프로그램
- 작업의 종류
1. Leaks: 메모리 누수 감지
2. Object Allocations - 객체의 생성과 해제를 감시
3. CPU Sampler – CPU 사용량 확인
4. Activity Monitor: 시스템 자원을 사용하는 상황을 감시 - 모든 프로그램 검사
5. Core Animation/OpenGL ES: 그래픽 성능 검사
6. System Usage: 프로그램의 I/O 작업을 감시
* 지역화(Localization)
- 각 나라별로 서로 다르게 보이는 애플리케이션을 구현하고자 하는 경우 사용하는 것. 일반적으로 문자열의 변환이나 이미지의 변환 및 아이콘의 변화 등을 의미한다
- 지역화 가능 요소: Nib 파일, 문자열, 아이콘 및 그래픽 요소, 소리 파일, Info.pList의 내용
- 지역화 파일을 생성하는 방법 : GetInfo 메뉴에서 General – Make File Localizable
* 문자열 지역화
- 문자열을 지역화하기 위해서는 Localizable.strings 파일을 생성해서 이 파일을 먼저 지역화해준다
- 각각의 지역화되어 있는 파일에서 “키값” = “ 실제데이터”; 로 지역화를 해주면 된다
- 매칭되는 키 값이 없다면 있는 그대로 출력될 것이며 이를 사용할 때는 NSLocalizedString(@”키값”, @”보충설명”)형태로 사용해야 한다
- 지역화 예제
1. Resource 디렉토리에 strings 파일을 생성(Localizable.strings) =>Mac OS X 의 Resource에 있다
2. Localizable.strings 파일을 선택하고 Info 버튼을 누르고 Make File Localizable을 누르고 Add Localization을 선택하고 Korean을 입력
3. Localizable.strings 아래의 English 파일에 입력
"Language" = "English";
"Greeting" = "Hello";
4. Localizable.strings 아래의 English 파일에 입력
"Language" = "한국어";
"Greeting" = "안녕하세요";
* xib 파일의 지역화
- View-Based Application 프로젝트 생성
- Resource 디렉토리에 그림 파일을 2개 생성
- ViewController.xib 파일을 선택하고 Info 아이콘을 클릭해서 General 탭에서 AddLocalization을 클릭, Korean을 추가
- xib 아래에 2개의 언어가 보일 것이고 언어별로 다르게 디자인하면 된다
* 리소스 지역화(다른 리소스 사용)
- Localizable.strings에 아래 문장 추가
"Image" = "Acrobat.png";
"Image" = "아크로뱃.png";
- ViewController.h 파일에 변수 선언 및 프로퍼티 선언
@interface StringLocalizeViewController : UIViewController
{
UILabel *label1;
UILabel *label2;
UIImageView * imgView;
}
@property(nonatomic, retain)IBOutlet UILabel *label1;
@property(nonatomic, retain)IBOutlet UILabel *label2;
@property(nonatomic, retain)IBOutlet UIImageView * imgView;
@end
* 오디오
- 소리를 재생하는 방법은 2가지로 하나는 System Sound API를 이용하는 방법이 있고 AVAudioPlayer를 이용하는 방법이 있다
- System Sound API를 이용하는 방법은 AIFF, WAV, CAF 파일만 재생이 가능
- System Sound API를 이용해서 소리를 재생하기 위해서는 먼저 사운드를 시스템 소리 객체(SystemSoundID)로 만들어야 한다
- 소리 객체 만들기: OSStatus AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSytemSoundID) 함수룰 호출해서 생성
- 소리 재생: AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)를 호출하면 된다. 이 때 매개 변수로 kSystemSoundID_Vibrate를 대입하면 진동이 생긴다
- 소리 객체 파기:OSStatus AudioServicesDisposeSystemSoundID(SystemSoundID *inSytemSoundID)를 호출하면 된다.
AudioToolbox.framework의 AudioToolbox.h에 메소드들이 정의되어 있음
- 파일경로를 URL 형태로만 받기 때문에 NSString을 사용해서 선언해야 함. 멀티미디어 기능은 거의 대부분이 URL 형태로 사용하므로 반드시 알아 두어야 함
- 아주 단순한 효과음만을 재생하는 기능이므로 단점과 제약이 많음
반복 불가능
음량 조절 불가능
재생 중에 중지 불가능
동시에 여러개 재생 불가능
확장자 제약이 심함
* AVAudioPlayer
- 긴 소리 재생에 주로 이용하는 방법으로 아래와 SystemSoundAPI 에 비해서 아래와 같은 장점을 가지고 있습니다.
반복기능 제공
음량 조절 가능
중간에 재생을 중지 할 수 있음
동시에 여러 개의 음악을 재생할 수 있음
음악 파일의 확장자 제한이 일반적으로 없음
-AVFoundation.framework에 존재하며 AVAudionPlayer.h 파일에 정의
- 메소드
initWithContentsOfURL:(NSURL *)url error:(NSError **)error: 초기화
(BOOL)play : 재생
(void)pause: 중지
(void)stop: 재생 종료
BOOL Playing: 재생여부를 리턴하는 프로퍼티
NSURL *url: 소리 파일의 URL(readonly)
float volume: 소리 크기(0.0 - 1.0)
NSInteger numberOfLoops: 반복 재생 횟수
NSTimeInterval currentTime: 초기 재생 시간