iOS 개발 - 대상 간 통신의 에이전트 프로토콜
3745 단어 iOS 개발
누가 대리 대상이고 누가 피대리 대상인지 확정하다.
사건은 어디에서 발생했습니까?누가 피대리 대상인가
이벤트는 어디에서 응답합니까?대리인
요구 사항:
예: 가정부가 아이를 돌보고, 아이가 더러워질 때 청결하게 해주고, 아이가 기분이 좋지 않을 때 놀아준다.
프록시 클래스 차일드
프록시 속성 정의 (id) 및 이 프록시 속성은 프로토콜을 준수해야 합니다
이벤트가 발생할 때, 이 이벤트에 응답하기 위해 프록시 속성의 프로토콜 방법을 호출해야 합니다.
프록시 클래스 Nanny
협의를 준수해야 한다
프로토콜 방법을 실현하려면 프로토콜 방법의 내용은 이벤트에 대한 응답이다.
대리 디자인 모델 해결은 프로그램 구조상의 문제로 프로그램 구조를 더욱 합리적이고 확장성을 가지며 클래스와 클래스 이전의 결합성을 낮춘다.
필요한 객체:
프록시 대상: Nanny, Grandma
프록시된 객체:차일드
프로세스:
1.프로토콜을 정의합니다. 프로토콜에 몇 가지 방법을 설명합니다.
2.에이전트가 프로토콜을 준수하는 것을 정의합니다. 프로토콜의 모든 방법에 대한 성명을 포함합니다.
3.프록시 클래스에 프록시 대상을 정의해야 합니다. 일반적인 형식 id< 프로토콜 이름 > delegate로 설정합니다.
4.프록시 대상이 이 기능을 완성하지 못할 때 프록시 대상에게 프록시 클래스에서 이루어진 프로토콜 방법을 호출해서 완성하도록 알려 줍니다.
프로토콜 클래스 설정
#import
@class Child;
// ,
@protocol CareBabyProtocol
//
- (void)batheChild:(Child *)child;
//
- (void)playWithChild:(Child *)child;
@end
어린이 클래스에서 프록시 대상 정의
#import "CareBabyProtocol.h"
#import
@interface Child : NSObject
@property NSInteger cleanValue; //
@property NSInteger happyValue; //
// , id delegate;
// (id) ,
@property id delegate;
- (instancetype)initWithCleanValue:(NSInteger)cleanValue happyValue:(NSInteger)happyValue;
@end
아이가 불결하거나 기분 나쁠 때 대리하는 방법.
#import "Child.h"
@implementation Child
- (instancetype)initWithCleanValue:(NSInteger)cleanValue happyValue:(NSInteger)happyValue {
self = [super init];
if (self) {
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
_cleanValue = cleanValue;
_happyValue = happyValue;
}
return self;
}
- (void)timerAction:(NSTimer *)timer {
_cleanValue--;
_happyValue--;
NSLog(@"clean:%li, happy:%li", _cleanValue, _happyValue);
// ,
if (_cleanValue == 95) {
[self.delegate batheChild:self];
}
if (_happyValue == 90) {
[self.delegate playWithChild:self];
}
}
@end
대리 대상 가정부를 정의하고 가정부가 협의에 서명하도록 합니다
#import "CareBabyProtocol.h"
#import
@class Child;
@interface Nanny : NSObject
@end
가정부의 협의 방법이 실현되다
#import "Nanny.h"
#import "Child.h"
@implementation Nanny
- (void)batheChild:(Child *)child {
NSLog(@" , ");
child.cleanValue = 100;
}
- (void)playWithChild:(Child *)child {
NSLog(@" , ");
child.happyValue = 100;
}
@end
main에서 아이 대상과 대리 대상(보모) 열기
#import "Child.h"
#import "Nanny.h"
#import "Grandma.h"
#import
int main(int argc, const char * argv[]) {
@autoreleasepool {
//Nanny *nanny = [[Nanny alloc] init];
Grandma *grandma = [[Grandma alloc] init];
Child *child = [[Child alloc] initWithCleanValue:100 happyValue:100];
//
//child.nanny = nanny;
//
child.delegate = grandma;
[[NSRunLoop currentRunLoop] run];
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iOS 아리운 대상 저장 OSS 파일 업로드/다운로드 실현이전 프로젝트에서 이미지 음성 등 자원 파일은 서버에 직접 데이터를 업로드하고 서버에 처리하고 저장했다.최근의 이 프로젝트는 서버가 직접 OSS를 열고 클라이언트가 아리운이 제공하는 업로드 다운로드 기능을 사용하여 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.