티스토리 뷰

iOS/Develop

Objective-c 정리

taehwan 2012.01.15 22:23
크리에이티브 커먼즈 라이선스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.
본문

이 글은 공부했던 코드 중에서 형태만을 정리해본 글입니다.!
별도의 소스코드가 나올 수 있으나..거의 없을 것 같습니다!^^;
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 부분은 포함하지 않고 작성하였습니다. 전체적인 부분도 아니고..일부분입니다.!



개인 광고 영역


댓글
댓글쓰기 폼
Total
5,263,458
Today
555
Yesterday
1,827
«   2018/10   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함