* import
- C/C++의 include와 비슷하지만 몇 가지가 다르다.
- 몇 번을 선언해도 한번만 실행됨.
- 아이폰 프로그래밍에서는 거의 Foundation 하나만 import하면 끝난다.
* 앞에 NS가 붙는 것은 NextStep의 약자로 스몰토크 시절부터 내려온 함수라는 뜻.
* NSAutorelease : 아주 중요한 함수. 메모리 할당 후 나중에 drain으로 알아서 해제하겠다는 선언.
- [[NSAutorelease alloc] init] : alloc으로 메모리 할당. init로 초기화. 이 두가지를 한번에 하고 싶다면 new로 바꿔 쓸 수 있다.
* NSLog : C의 printf와 거의 같다.
- NSLog(@"%d", 10); <-- "%d"는 서식, 10은 데이터. 앞에 @가 붙는 것을 제외하면 같다.
- C의 printf는 UTF-8 아스키 코드를 출력하지만 NSLog는 유니코드로 출력한다.
* 서식
- %d, %i, %x, %o, %u
- %f, %g
- %c
- %s : 주소부터 바이트 단위로 읽어서 null을 만날 때까지 문자로 출력
- %@ : description 메소드 출력. C에는 없고 오브젝티브 C에만 있음. NSString, NSNumber, NSDate는 이것밖에 지원 안한다.
* 오브젝티브C에서는 기본적으로 데이터에 숫자처리는 없고 문자열로 취급한다.
- 숫자데이터 10과 문자데이터 Hello가 있을 경우 이 둘을 합치고 싶으면 단순히 10 + "Hello" 해 버리면 됨.
- 숫자데이터 10을 문자열로 바꾸고 싶을 경우 단순히 10 + "" 해버리면 됨.
* 자료형
- 기본적으로 C의 자료형은 다 사용할 수 있다.
- Value 타입 : C와 거의 같다. 없는 것은 BOOL 타입. BOOL 타입의 예:1, 아니오:0.
- Reference 타입 : C의 포인터와 같다. 객체라는 뜻. 대개 주소라서 앞에 *을 붙이지만 id는 *가 붙지 않아도 주소로 받는다.
- id는 C의 void *와 유사하다. 모든 데이터 타입의 주소를 기억할 수 있다. 동적 데이터 할당 - 자료가 들어올 때 그에 맞게 기억장소를 할당.
- 이 경우 printf("%d", *vp); 라고 하면 에러가 난다. void *는 시작주소는 기억하지만 사이즈는 기억하지 못하기 때문. 그래서 C언어에서는 (Cint *)vp)와 같이 vp를 int로 형변환을 해서 알아낸다.
- 그러나 오브젝티브C에서는 자료 저장시에 이미 자료의 크기도 함께 저장한다. 따라서
이렇게 하면 가능해진다.
- 다만 id는 모든 자료타입을 다 받을 수 있기 때문에 차후 관리가 어렵다. 가능하면 사용하지 말고 형변환을 통해 사용하는 것을 추천.
* enum : 열거형 상수.
- 아이폰 프로그래밍에서 매우 자주 사용하게 됨.
- enum test {Zero, One, Two}; -> {K=10, Z, A} 와 같이 주었을 경우 Z는 11, A는 12가 된다(초기값부터 시작해 증가하게 됨).
* 연산자와 제어문은 C와 같다.
* 오브젝티브 C의 클래스
- 선언부와 구현부가 분리되어 있다.
- 선언부가 .h 파일에 들어가고, 구현부는 .m 파일에 들어간다.
- 따라서 기본적으로 한 쌍으로 사용되며, 이름도 같은 것이 보통이다.
- 선언 문법
- 구현 문법
* 메소드
- "-"가 붙으면 인스턴스 메소드(객체).
- 객체 생성
클래스명 * 객체명 = [클래스명 alloc]; new
- "+"가 붙으면 클래스 메소드.
- C/C++의 include와 비슷하지만 몇 가지가 다르다.
- 몇 번을 선언해도 한번만 실행됨.
- 아이폰 프로그래밍에서는 거의 Foundation 하나만 import하면 끝난다.
* 앞에 NS가 붙는 것은 NextStep의 약자로 스몰토크 시절부터 내려온 함수라는 뜻.
* NSAutorelease : 아주 중요한 함수. 메모리 할당 후 나중에 drain으로 알아서 해제하겠다는 선언.
- [[NSAutorelease alloc] init] : alloc으로 메모리 할당. init로 초기화. 이 두가지를 한번에 하고 싶다면 new로 바꿔 쓸 수 있다.
* NSLog : C의 printf와 거의 같다.
- NSLog(@"%d", 10); <-- "%d"는 서식, 10은 데이터. 앞에 @가 붙는 것을 제외하면 같다.
- C의 printf는 UTF-8 아스키 코드를 출력하지만 NSLog는 유니코드로 출력한다.
* 서식
- %d, %i, %x, %o, %u
- %f, %g
- %c
- %s : 주소부터 바이트 단위로 읽어서 null을 만날 때까지 문자로 출력
- %@ : description 메소드 출력. C에는 없고 오브젝티브 C에만 있음. NSString, NSNumber, NSDate는 이것밖에 지원 안한다.
* 오브젝티브C에서는 기본적으로 데이터에 숫자처리는 없고 문자열로 취급한다.
- 숫자데이터 10과 문자데이터 Hello가 있을 경우 이 둘을 합치고 싶으면 단순히 10 + "Hello" 해 버리면 됨.
- 숫자데이터 10을 문자열로 바꾸고 싶을 경우 단순히 10 + "" 해버리면 됨.
* 자료형
- 기본적으로 C의 자료형은 다 사용할 수 있다.
- Value 타입 : C와 거의 같다. 없는 것은 BOOL 타입. BOOL 타입의 예:1, 아니오:0.
- Reference 타입 : C의 포인터와 같다. 객체라는 뜻. 대개 주소라서 앞에 *을 붙이지만 id는 *가 붙지 않아도 주소로 받는다.
- id는 C의 void *와 유사하다. 모든 데이터 타입의 주소를 기억할 수 있다. 동적 데이터 할당 - 자료가 들어올 때 그에 맞게 기억장소를 할당.
int a = 20;
float f = 10.7f;
void * vp = &a;
vp = &f;
float f = 10.7f;
void * vp = &a;
vp = &f;
- 이 경우 printf("%d", *vp); 라고 하면 에러가 난다. void *는 시작주소는 기억하지만 사이즈는 기억하지 못하기 때문. 그래서 C언어에서는 (Cint *)vp)와 같이 vp를 int로 형변환을 해서 알아낸다.
- 그러나 오브젝티브C에서는 자료 저장시에 이미 자료의 크기도 함께 저장한다. 따라서
id x = &a;
printf("%d", *x);
printf("%d", *x);
이렇게 하면 가능해진다.
- 다만 id는 모든 자료타입을 다 받을 수 있기 때문에 차후 관리가 어렵다. 가능하면 사용하지 말고 형변환을 통해 사용하는 것을 추천.
* enum : 열거형 상수.
- 아이폰 프로그래밍에서 매우 자주 사용하게 됨.
- enum test {Zero, One, Two}; -> {K=10, Z, A} 와 같이 주었을 경우 Z는 11, A는 12가 된다(초기값부터 시작해 증가하게 됨).
* 연산자와 제어문은 C와 같다.
* 오브젝티브 C의 클래스
- 선언부와 구현부가 분리되어 있다.
- 선언부가 .h 파일에 들어가고, 구현부는 .m 파일에 들어간다.
- 따라서 기본적으로 한 쌍으로 사용되며, 이름도 같은 것이 보통이다.
- 선언 문법
@ interface 클래스명 : 상속되는 클래스 // 반드시 상속되는 클래스가 필요하다
{
인스턴스 변수 선언;
}
+- (리턴타입) 메소드명;
@end
{
인스턴스 변수 선언;
}
+- (리턴타입) 메소드명;
@end
- 구현 문법
@ implementation 클래스명 // 상속클래스명은 필요없다
+- (리턴타입) 메소드명;
{
정의
}
@end
+- (리턴타입) 메소드명;
{
정의
}
@end
* 메소드
- "-"가 붙으면 인스턴스 메소드(객체).
(리턴타입) 메소드이름 : (매개변수 자료형) 매개변수명
+(void) disp : (int) a
{
NSLog(@"%d", a);
}
{
NSLog(@"%d", a);
}
- 객체 생성
클래스명 * 객체명 = [클래스명 alloc]; new
- "+"가 붙으면 클래스 메소드.
'프로그래밍 > Objective-C' 카테고리의 다른 글
중앙정보학원 아이폰과정 3일차 - 2010년 7월 7일 (0) | 2010.07.07 |
---|---|
중앙정보학원 아이폰과정 2일차 - 2010년 7월 6일 (0) | 2010.07.06 |
한글 인코딩 변경과 구글날씨 RSS (0) | 2010.06.25 |
아이폰 흔들기(shaking) 검사 (0) | 2010.06.25 |
몇 가지 팁들 (0) | 2010.06.25 |