iOS 와 관찰자 모드 (2)
코드 예제
iOS 에서 일상적인 개발 에 서 는 코코아 터치 프레임 워 크 알림 과 KVO 모두 관찰자 모드 를 구현 했다.다음 에 작은 강 은 두 가지 모델 로 간단하게 실현 하면 구체 적 인 통지 와 kvo 의 원 리 는 여기 서 군말 하지 않 을 것 이다. 디자인 모델 의 중심 이 아니 기 때문이다.
알림 실현
// ,
@interface Bell : NSObject
- (void)attachObserver:(Observer *)observer;
- (void)classBegin;
- (void)classEnd;
@property (nonatomic, strong) NSMutableArray *observers;
@end
@implementation Bell
- (void)attachObserver:(Observer *)observer {
// , ios ,
[self.observers addObject:observer];
}
- (void)classBegin {
NSLog(@" ");
NSDictionary *dic = @{@"classBegin":@YES};
[[NSNotificationCenter defaultCenter] postNotificationName:@"classBellRing"
object:self userInfo:dic];
}
- (void)classEnd {
NSLog(@" ");
NSDictionary *dic = @{@"classBegin":@NO};
[[NSNotificationCenter defaultCenter] postNotificationName:@"classBellRing"
object:self userInfo:dic];
}
@end
//
@interface Observer : NSObject
- (void)update:(NSNotification *)notification;
@end
@implementation Observer
- (id)init {
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"classBellRing" object:nil];
}
return self;
}
- (void)update:(NSNotification *)notification {
//to be Override...
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:@"classBellRing"];
}
@end
//
@interface Student : Observer
@end
@implementation Student
- (void)update:(NSNotification *)notification {
NSDictionary *userInfo = notification.userInfo;
if ([[userInfo objectForKey:@"classBegin"] boolValue]) {
[self classBegin];
} else {
[self classEnd];
}
}
- (void)classBegin {
NSLog(@" , ");
}
- (void)classEnd {
NSLog(@" , ");
}
@end
//
int main(int argc, const char * argv[]) {
@autoreleasepool {
//
Bell *bell = [[Bell alloc] init];
Student *stu1 = [[Student alloc] init];
[bell attachObserver:stu1];
[bell classBegin];
[bell classEnd];
}
return 0;
}
실행 결과:
2017-01-06 23:37:49.022 DesignPattern[3309:91471]
2017-01-06 23:37:49.023 DesignPattern[3309:91471] ,
2017-01-06 23:37:49.023 DesignPattern[3309:91471]
2017-01-06 23:37:49.023 DesignPattern[3309:91471] ,
Program ended with exit code: 0
이상, 문제 가 있 으 면 지적 하여 주시 기 바 랍 니 다 ~ 본문 과 작가 의 오리지널, 전재 출처 를 밝 혀 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.