iOS-대표


대리자 예

객체 A가 작업을 수행하기 위해 B를 호출한다고 가정합니다. 작업이 완료되면 객체 A는 객체 B가 작업을 완료했음을 알아야 하며 객체 A는 다른 필요한 작업을 수행합니다.

위 예제의 핵심 개념은 다음과 같습니다.

  • A는 B의 위임 개체입니다.
  • B는 A를 참조합니다.
  • A는 B의 위임 메서드를 구현합니다.
  • B는 위임 메서드를 통해

에 알리고 위임을 생성합니다. (대리자) 개체

1. 단일 보기 애플리케이션을 만듭니다.

2. 그런 다음 파일 -> 새로 만들기 -> 파일...

addNewFile

3을 선택하고 다음을 클릭합니다.

4.

setProtocolName

5. 그런 다음 Create를 선택합니다.

6. SampleProtocol.h 폴더에 프로토콜을 추가하고 아래와 같이 코드를 업데이트합니다.

#import <Foundation/Foundation.h>// 协议定义@protocol SampleProtocolDelegate <NSObject>@required- (void) processCompleted;@end// 协议定义结束@interface SampleProtocol : NSObject{   // Delegate to respond back
   id <SampleProtocolDelegate> _delegate; }@property (nonatomic,strong) id delegate;-(void)startSampleProcess; // Instance method@end

7. SampleProtocol.m 파일을 수정합니다. 인스턴스 메서드를 구현하는 코드:

#import "SampleProtocol.h"@implementation SampleProtocol-(void)startSampleProcess{    
    [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate 
	selector:@selector(processCompleted) userInfo:nil repeats:NO];}@end

8. 아래와 같이 개체 라이브러리의 레이블을 UIView로 끌어서 ViewController.xib에 UILabel을 추가합니다.

delegateLabel

9. IBOutlet 레이블을 만들고 이름을 myLabel로 지정합니다. 아래와 같이 코드를 업데이트하고 ViewController.h

#import <UIKit/UIKit.h>#import "SampleProtocol.h"@interface ViewController : UIViewController<SampleProtocolDelegate>{    IBOutlet UILabel *myLabel;}@end

10에 SampleProtocolDelegate를 표시합니다. 인증 메서드를 완료하고 SampleProtocol에 대한 객체를 생성한 다음 startSampleProcess 메서드를 호출합니다. 아래와 같이 ViewController.m 파일을 업데이트합니다.

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    SampleProtocol *sampleProtocol = [[SampleProtocol alloc]init];
    sampleProtocol.delegate = self;    [myLabel setText:@"Processing..."];    [sampleProtocol startSampleProcess];// Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}#pragma mark - Sample protocol delegate-(void)processCompleted{    
    [myLabel setText:@"Process Completed"];}@end

11. 아래와 같은 출력이 표시됩니다. SampleProtocol 개체에 의해 인증 메서드가 호출되면 태그 실행기 코드도 업데이트됩니다. .

delegateResult