1.delegateide
傳值,傳事件。oop
一、避免子類化帶來的過多的子類以及子類與父類的耦合
二、經過委託傳遞消息機制實現分層解耦ui
eg.spa
代理3d
#import <Foundation/Foundation.h> @class Children; @protocol ChildrenDelegate <NSObject> @required - (void)Eat:(Children *)children; @optional //.... @end
代理對象->保姆代理
.h @interface 保姆 : NSObject<ChildrenDelegate> - (void)Eat:(Children *)children; @end .m @implementation 保姆 - (void)Eat:(Children *)children{ NSLog(@""); } @end
被代碼對象->小孩code
.h @interface Children : NSObject { id<ChildrenDelegate> delegate; NSInteger intTimer; } @property (strong) id<ChildrenDelegate> delegate; //-(void)setDelegate:(id)delegate; @end .m - (id)init { self=[super init]; if (self!=nil) { [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(go) userInfo:nil repeats:YES]; } return self; } - (void)go { [delegate Eat:self]; }
Test:對象
Children *c=[[Children alloc]init]; 保姆 *n=[[保姆 alloc]init]; c.delegate=n; // [c setDelegate:n]; [[NSRunLoop currentRunLoop]run];