object-c 객체생성 기본원리 int
1) 일단 파일부터 생성하겠습니다. 새프로젝트 생성해서 Application -> Command Line Tool -> choose 클릭
기본프로젝트 생성후 Class1 클래스를 생성해야합니다.
2) 일단 Class1 파일을 만들기위해서 File -> New File 클릭
아래 그림처럼 Cocoa Class-> Object -> Next 버튼 클릭
Class 이름을 넣어주시고 Also Create "......" 체크해주셔야 합니다.
기본 프로젝트가 완료되었습니다.
3) 이제 부터 소스 코딩을 하겠습니다.
#import <Cocoa/Cocoa.h> // Foundation 헤더 포함
@interface Class1 : NSObject{
int a, b;
}
-(void) initAB;
-(void) printAB;
@end
#import "Class1.h"
@implementation Class1
-(void) initAB{ // 객체를 생성후 init함수를 이용하여 변수 초기화
a = 10;
b = 20;
}
-(void) printAB{
printf("%d, %d\n", a,b);
}
@end
#import <Foundation/Foundation.h>
#import "Class1.h" // Class1 헤더 포함
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// start
Class1 *class1 = [Class1 new];
[class1 initAB];
[class1 printAB];
[pool drain];
return 0;
}
실행시켜 보겠습니다. 아래와 같이 결과가 나오겠지요
다시 소스를 보면
-(void) initAB{ // 객체를 생성후 init함수를 이용하여 변수 초기화
a = 10;
b = 20;
}
:이 함수를 객체를 초기화 하는 역할을 하는 함수이므로 처음부터 객체를 생성할때
호출하면 편리함
3) 그래서 Class 헤더 파일에는 선언하지 않고 m 파일에서 소스를 추가합니다.
Edit -> Insert Text => Object-C => init Definition 클릭
#import "Class1.h"
@implementation Class1
==========================================
- (id) init => 이함수가 자동생성된다.
{
self = [super init];
if (self != nil){
}
return self;
}
==========================================
-(void) initAB{
a = 10;
b = 20;
}
-(void) printAB{
printf("%d, %d\n", a,b);
}
@end
=> init 함수가 자동생성하는 이유는 Class1이 NSObject 클래스를 상속했기에 NSObject 기능까지 같이 물려받았기 때문이다.
- (id) init
{
self = [super init];
if (self != nil){
printf("init 메소드 호출\n"); => 새로이 추가
}
return self;
}
위와 같이 나오는 이유는 객체가 생성되면서 init()함수를 호출하기때문이다.
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// start
Class1 *class1 = [Class1 new]; => class1 이 생성되면서 init()함수를 호출
[class1 initAB];
[class1 printAB];
[pool drain];
return 0;
}
자동으로 이루줘야 할 작업()들은 init(변수초기화, 다른 inner 객체생성)함수에서 해주면 된다. 처음부터 객체를 설계할때 처음에 해주어야 할작업은 init() 함수에 해주면 됩니다.
.
'아이폰개발2 > Objective-C' 카테고리의 다른 글
객체지향 상속 (1) | 2011.08.08 |
---|---|
interface 와 implement의 분리 (0) | 2011.07.25 |
메소드에 인자값 전달하는 방법 (0) | 2011.07.21 |
Objective-C 기초 요약(도전!아이폰4 프로그래밍교재 참고) (1) | 2011.06.19 |