출처 : Snow house 님의 블로그.
참고자료 :
[ios] objective-c 에서의 static constant 정의 하는 방법.
[ios]object-c enumeration 정의 방법
[ios] object-c #pragma mark 의미.
[ios] object-c #import 와 #include 의 차이.
[ios] object-c @class 와 #import 의 차이.
[ios] object-c category ( categories )
object-c 의 기초 개념.
Calling Methods
- 모든 객체 타입의 오른쪽에는 별포(*) 가 있다. 모든 object-c 객체 변수들은 포인터 타입이기 때문이다.
- id 타입은 포인터 타입으로 미리 정의되어 있기 때문에 별표를 필요로 하지 않는다.
Multi-Input Methods
- (BOOL) writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
와 같은 함수 정의가 있으면, 이 함수의 이름은 writeToFile:atomically 이다.
:다음에는 parameter 들이 들어간다.
Accessors
- object-c 에서 모든 인스턴스 변수들은 private 이 기본 설정이기 때문에, 대부분의 경우 accessor 를 이용해야 한다. 다음의 2가지 문법으로 접근할 수 있다.
1.x 문법
[photo setCaption:@"Day at the Beach"];
output = [photo caption];
// caption 이라는 메소드를 호출하는 것으로 접두사 get 을 붙이지 않아도 된다.
2.0 문법
- getter 와 setter 를 위해 dot 문법이 새롭게 등장했다.
photo.caption = @"Day at the Beach";
output = photo.caption;
Creating Objects
- 객체를 생성하는 방법은 2가지가 있다.
NSString* myString = [NSString string];
NSString* myString [[NSString alloc] init];
NSNumber* value = [[NSNumber alloc] initWithFloat:1.0];
Basic Memory Management
- automatic 스타일로 객체를 생성했다면 메모리 해지를 인위적으로 해주면 안된다. 이 경우 crash 가 발생할 수 있다.
- garbage collection 의 지원을 받지 못하는 경우 alloc 한 녀석은 강제로 메모리 해지를 해주어야 한다.
// released automatically
NSString* string1 = [NSString string];
// must release
NSString* string2 = [[NSString alloc] init];
[string2 release];
// released automatically
[caption autorelease];
caption = [input retain];
Designing a Class Interface
- header 는 .h 파일에 씌여지며, 인스탄스 변수와 public 함수들을 정의한다.
- 구현부는 .m 파일에 정의되며, header 에 정의한 함수와 private 함수들을 구현한다.
header
- @interface 는 클래스의 header 선언임을 나타낸다.
- : 이후는 super class 를 명시할 때 사용한다.
- 중괄호 안에는 인스턴스 변수를 정의한다.
- 중괄호 바깥에는 public 함수들을 정의한다. 함수선언은 - 혹은 + 로부터 시작한다. - 는 public 함수이고, + 는 클래스 메소드 ( static method )임을 의미한다.
- 함수의 return 값이 명시되지 않은 경우는 id 형을 반환한다고 가정되지만, 일반적으로 이렇게 정의하진 않습니다.
- @end 는 클래스 선언의 종료를 나타낸다.
@interface Photo : NSObject {
NSString* caption;
}
- (void) setCaption: (NSString*) input;
@end
implementation
- @implementation 은 클래스의 구현을 나타낸다. interface 와 같이 @end 로 마쳐진다.
@implmenation Photo{
- (void) setCaption: (NSString*) input
{
[caption autorelease];
caption = [input retain];
// caption = input; // g.c. support case.
}
}
init
- (id) init
{
if ( self = [super init] )
{
[self setCaption:@"Default Caption"];
}
return self;
}
dealloc
- 메모리로부터 객체가 제거될 때 객체에서 호출된다.
- (void) dealloc
{
[caption release];
[super dealloc];
}
- gc 가 지원되는 경우에는 dealloc 이 호출되지 않는다. 대신 finalize 메소드가 실행된다.
More on Memory Management
- object-c 의 메모리 관리 시스템은 reference counting 이다.
- alloc 은 r.c 를 +1, retain 도 r.c 를 +1, release 는 r.c 를 -1. ( retain 은 copy 의 개념 )
Logging
- printf 와 매우 비슷한데, 토큰 추가는 %@ 를 통해 한다.
NSLog ( @"The current date and time is : %@", [NSDate date] );
Properties
- properties 는 object-c 에서 accessor 들을 자동으로 만들어 낼 수 있게 한다. @properties 는 자동으로 만들어질 수 있게 하는 허락같은 것이다.
@property (strong, nonatomic) NSString* caption;
- @properties 로 허락이 떨어졌으니, 실제로 생성하라는 명령을 내려야 한다. 이는 @synthesize 지시자를 사용해서 한다. @synthesize 로 명시했어도, getter 나 setter 를 명시적으로 구현해주면, compiler 가 구현된 accessor 는 기본으로 구현하지 않는다.
@synthesize caption;
Calling Methods on Nil
- object-c 의 nil 은 다른 언어의 NULL 포인터와 같은 것.
'프로그래밍 놀이터 > iOS' 카테고리의 다른 글
[ios] object-c 제대로 singleton 만드는 방법. (0) | 2012.11.04 |
---|---|
[ios]objective-c 네트워크 연결 상태 확인하기. (0) | 2012.11.04 |
[ios] object-c category ( categories ) (0) | 2012.11.03 |
[ios] object-c @class 와 #import 의 차이. (0) | 2012.11.03 |
[ios] object-c #import 와 #include 의 차이. (0) | 2012.11.03 |
댓글