PDA&Mobile2011/02/23 10:10
* 본 포스트의 내용은 MissFlash가 학습용도로 정리한 것입니다. 내용은 정기적으로 업데이트되니 퍼가기보다는 링크나 트랙백을 이용해주시면 감사하겠습니다.

일반적으로, 상위 클래스에서 하위 클래스의 메소드를 실행하는데는 어려움이 없지만 하위 클래스에서 상위 클래스의 메소드를 실행할 때는 약간의 테크닉이 필요합니다. 이번 포스트에서 소개할 프로토콜 & 델리게이트 구문이 바로 그 주인공이죠. 물론, 최상위 계층의 앱 델리게이트를 이용해도 같은 효과를 볼 수 있지만... 실행하려는 메소드가 특정 클래스에 국한될 경우일 때는 프로토콜 & 델리게이트 구문이 더욱 효과적이라고 할 수 있습니다.

아래는 Planner S를 만들면서 실제 사용한 코드 중 일부를 정리한 것인데요... 코드중 빨간색 부분을 중점적으로 살펴보시면 되며 간단한 설명은 아래를 참고하시기 바랍니다.
  • 상위 클래스 : ShotView.h, ShotView.m
  • 하위 클래스 : ShotMemberList.h, ShotMemberList.m
  • 상위 클래스에 하위 클래스의 델리게이트를 추가 : ShotFollowDelegate
  • 상위 클래스에 하위 클래스의 프로퍼티 추가(반드시 필요한 것은 아님) : shotMemberList
  • (상위 클래스에) 하위 클래스에서 실행하고 싶은 메소드 추가 : - (void) refreshFollow:(NSString *)type;
  • 하위 클래스 인스턴스의 delegate 속성 설정 : shotMemberList.delegate = self;
  • 하위 클래스 인스턴스를 release 하지 말것!
  • 하위 클래스에 프로토콜 및 메소드 선언 : @protocol ShotFollowDelegate <NSObject>; - (void) refreshFollow:(NSString *)type; @end
  • 하위 클래스에 delegate 프로퍼티 추가 : id<ShotFollowDelegate> delegate;
  • 하위 클래스에서 delegate 프로퍼티를 통해 원하는 메소드 실행 : [self.delegate refreshFollow:@"YES"];

ShotView.h
#import <UIKit/UIKit.h>
#import "ShotMemberList.h"

@ interface ShotView : UIViewController <ShotFollowDelegate> {
ShotMemberList* shotMemberList;
}
@ property (nonatomic, retain) ShotMemberList* shotMemberList;
- (void) refreshFollow:(NSString *)type;
@ end

ShotView.m
#import "ShotView.h"

@ implementation ShotView
@ synthesize shotMemberList;

- (void) refreshFollow:(NSString *)type{
    // Codes are here...
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    shotMemberList = [[ShotMemberList alloc] init];
    shotMemberList.delegate = self;
    [self.navigationController pushViewController:shotMemberList animated:YES];

    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)dealloc {
    // Delegate/Protocol 사용시 인스턴스를 release 하면 안됨
    //[shotMemberList release];
    [super dealloc];
}

@ end

ShotMemberList.h
#import <UIKit/UIKit.h>

@ protocol ShotFollowDelegate <NSObject>;
- (void) refreshFollow:(NSString *)type;
@ end

@ interface ShotMemberList : UIViewController {
    id<ShotFollowDelegate> delegate;
}
@ property (nonatomic, assign) id<ShotFollowDelegate> delegate;

@ end

ShotMemberList.m
#import "ShotMemberList.h"

@ implementation ShotMemberList
@ synthesize delegate;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [self.delegate refreshFollow:@"YES"];
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)dealloc {
    [delegate release];
    [super dealloc];
}

@ end
저작자 표시 비영리 변경 금지

이 글은 새로운 정보가 추가될 때마다 업데이트됩니다. 추천으로 아래 숫자에 1을 더해보세요. :)
RSS구독을 하시면 포스트를 배달해 드립니다. ▷ 한RSS 구독하기, 구글리더 구독하기

TRACKBACK http://blog.missflash.com/trackback/682 관련글 쓰기

  1. spiderman unlimited hack  삭제

    2014/10/05 00:48TRACKBACK FROM spiderman unlimited hack

    [ MissFlash - Digital Life ] :: [팁] iOS Protocol & Delegate(프로토콜 & 델리게이트) 구문 정리

  2. legion of heroes hack  삭제

    2014/10/17 01:35TRACKBACK FROM legion of heroes hack

    [ MissFlash - Digital Life ] :: [팁] iOS Protocol & Delegate(프로토콜 & 델리게이트) 구문 정리

  3. not fake  삭제

    2014/10/19 02:36TRACKBACK FROM not fake

    [ MissFlash - Digital Life ] :: [팁] iOS Protocol & Delegate(프로토콜 & 델리게이트) 구문 정리

  4. My website  삭제

    2014/10/31 03:43TRACKBACK FROM My website

    [ MissFlash - Digital Life ] :: [팁] iOS Protocol & Delegate(프로토콜 & 델리게이트) 구문 정리

댓글을 달아 주세요

  1. Favicon of http://www.socialfansgeek.com/ BlogIcon Buy youtube views cheap

    관리자의 승인을 기다리고 있는 댓글입니다

    2012/12/06 23:57 [ ADDR : EDIT/ DEL : REPLY ]
  2. Favicon of http://www.bestessaywritingservice.org/ BlogIcon best writing service

    관리자의 승인을 기다리고 있는 댓글입니다

    2012/12/09 01:28 [ ADDR : EDIT/ DEL : REPLY ]
  3. Favicon of http://www.michaelkorshandbagsx.com/ BlogIcon michael kors

    관리자의 승인을 기다리고 있는 댓글입니다

    2012/12/24 21:32 [ ADDR : EDIT/ DEL : REPLY ]
  4. Favicon of http://www.investment-realestate.com.au BlogIcon investment

    관리자의 승인을 기다리고 있는 댓글입니다

    2012/12/27 23:06 [ ADDR : EDIT/ DEL : REPLY ]
  5. Favicon of http://www.sapphirecig.com BlogIcon smokeless cigarettes

    관리자의 승인을 기다리고 있는 댓글입니다

    2013/01/09 19:51 [ ADDR : EDIT/ DEL : REPLY ]
  6. Favicon of http://www.aussiecarloans.com.au BlogIcon aussiecarloans

    관리자의 승인을 기다리고 있는 댓글입니다

    2013/01/16 19:39 [ ADDR : EDIT/ DEL : REPLY ]