티스토리 뷰
이 글은 공부했던 코드 중에서 형태만을 정리해본 글입니다.!
별도의 소스코드가 나올 수 있으나..거의 없을 것 같습니다!^^;
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 부분은 포함하지 않고 작성하였습니다. 전체적인 부분도 아니고..일부분입니다.!
'iOS > Develop' 카테고리의 다른 글
XCode에서 ZXing 라이브러리 사용전 간단히 알아보기 (0) | 2012.03.25 |
---|---|
1. xcode zxing 사용을 위해서 스토리보드 기반 준비 (1) | 2012.03.19 |
XCode 4.3 정식버전이 공개되었네요. (0) | 2012.02.17 |
Xcode 4.2 empty application에서 pickerView 올리기 (0) | 2012.01.31 |
XCode에서 wifi를 통한 Debug 시 문제점 (0) | 2012.01.26 |
댓글