티스토리 뷰

iOS/Develop

Objective-c 정리

taehwan 2012. 1. 15. 22:23

이 글은 공부했던 코드 중에서 형태만을 정리해본 글입니다.!
별도의 소스코드가 나올 수 있으나..거의 없을 것 같습니다!^^;
Objective-c 코드지만 XCode!!
틀린 부분은 댓글을 통해 꼭 틀렸다고 알려 주셨으면 합니다.^^;

Objective-c의 protocol
기본 형태

@protocol xxx <nsobject>
@required //이 다음 구문은 다른 언어의 추상개념으로 생각하고..무조건적으로 사용해야 함.
-(void)print;
@optional //이 다음 구문은 선택적으로 재구성 할 수 있음
@end


protocol을 사용할려면
<protocolName>으로 정의하고 사용하면 됨.
이때에는 @required의 함수는 100% 구성해야 함.. 그렇지 않으면 워닝을 뿜을 것임!

아래처럼 사용 할 경우 strong, retain을 사용해야 함

@property (strong, retain) 클래스명 * ddd;


//strong는 AOC모드일 경우
//retain는 AOC 모드가 아닐 경우
사용 할 경우 (java의 get, set)이 자동으로 만들어 짐(oc에는 get터가 없음. 단순히 함수명을 사용)

단순 변수를 선언 할 경우

@property int x;

strong, retain을 선언할 필요 없음

init 메소드 구현

-(id) init {
   if([super init] == self) {
   }
   return self;
}

위의 문구가 기본형태로 만들어 짐

factory 메소드 구현
+(클래스명 *) ?:(?)? 의 형태로 구현 할 수 있음
자기자신을 객체로 만들고 return 할 수도 있음(필요에 따라 다르겠죠?)
init을 호출해서 객체를 생성하고 리턴 할 경우
위의 factory 메소드를 구현하고 사용할 경우
ABC *a = [ABC new];
a.to = [BCD bcdWithX:15]; Factory 메소드를 사용하고 리턴 받음 (이 경우 a.to 는 BCD *g;의 형태 임)
[a print];
처럼 사용할 수 있음

- (NSString *) description {}; 함수를 재 정의 할 수 있음.
기본 description을 호출 하면 주소값이 나옴.

delegate를 사용하는 하나의 예
2개 이상의 클래스와 1개의 delegate를 구성한다는 전제의 예임
먼저 protocol을 사용하여 print()를 선언함 (위에 참고)

- (void)print:(클래스명 *)p; //로 선언

delegate를 포함하는 클래스
[self.delegate print:self];
//delegate(protocol로 정의된 클래스들을 id형태로 delegate로 받아오게 됨)의 print메소드를 호출
//이때 각 메소드는 print가 정의되어 있어야 한다.. 그 정의는 protocol에 의해 고정 됨.
if(self.delegate && [self.delegate respondsToSelector:@selector(printA:)]) 
//printA 라는 메소드가 존재하는지 확인하기 위한 if문 존재한다면 출력 그렇지 않으면 pass

위와 같이 선언하고 2개의 다른 함수에는 <protocol Name>을 가지고와서 print함수를 재정의 한다.
여기서는 출력을 위해서 NSLog(@"aaa");를 정의하겠음

main에서는
delegate를 new로 생성하고(delegate가 위에서 delegate를 가지는 클래스 명임)
delegate *d = [delegate new];
//나머지 2개의 함수를 정의
abc *a = [abc new];
bcd *b = [bcd new];
d.delegage = a; //이게 가능한 이유는 <protocol>을 상속(?) 받았기 때문
[d printA];
d.delegate = b;  //역시 이게 가능한 이유는 <protocol>을 상속(?) 받았기 때문 
[d printA];

위와 같이 사용 할 수도 있다. 메모리를 줄이는 방법(?) 중에 하나로 봐도 댈것 같습니다. 저렇게 정의해야하는 함수가 많아지면 더욱더.....

이글은 제가 자주 공부한 글을 간단히 정리한 글입니다.
SDK 부분은 포함하지 않고 작성하였습니다. 전체적인 부분도 아니고..일부분입니다.!





댓글