項(xiàng)目中我們有時(shí)候會(huì)遇到一些情況,需要經(jīng)常使用某個(gè)代理,但是又不是都需要遵從協(xié)議,這時(shí)候就可以用我的這種方式完全解耦,一些小東西,歡迎指點(diǎn)和指指點(diǎn)點(diǎn)。下面直接開始:
要是大家閑看的麻煩,可以直接下載:https://github.com/IDwangluting/DeleagateOperation.git
demo 中 總共用了幾個(gè)文件 ,
Viewcontroller,
newDeleagte.h,
UIViewController+Protocol,
UIViewController+Delegate
然后viewcontroller 中的代碼是這樣的:
import "ViewController.h"
import "UIViewController+Delegate.h"
import UIViewController+Protocol.h"
@implementation ViewController
-(void)viewDidLoad {
[super viewDidLoad];
self.delegate = self ;
[self addProtocol];
}
-(void)dealloc {
[self removeDelegate];
}
NewDeleagte.h 中的代碼在下面,這里只有 協(xié)議的申明,
import <Foundation/Foundation.h>
@protocol NewDelegate <NSObject>
-(void)viewWillEnter;
-(void)viewDidEnter;
-(void)viewWillOut;
-(void)viewDidOut;
@end
UIViewController+Protocol.h 中的代碼是這樣的:
import "NewDelegate.h"
@interface UIViewController (Protocol)
@property (nonatomic,assign)id<NewDelegate> delegate ;
-(void)addProtocol ;
-(void)removeDelegate;
@end
UIViewController+Protocol.m 中的代碼在下面,這里遵從了協(xié)議
import "UIViewController+Protocol.h"
import <objc/runtime.h>
@implementation UIViewController (Protocol)
-(void)setDelegate:(id<NewDelegate>)delegate {
objc_setAssociatedObject(self, @selector(delegate), delegate, OBJC_ASSOCIATION_ASSIGN);
}
-(id<NewDelegate>)delegate {
return objc_getAssociatedObject(self, @selector(delegate)); ;
}
-(void)addProtocol {
if (self.delegate && [self.delegate respondsToSelector:@selector(viewWillEnter)]) {
[self.delegate viewWillEnter];
}
if (self.delegate && [self.delegate respondsToSelector:@selector(viewDidEnter)]) {
[self.delegate viewDidEnter];
}
if (self.delegate && [self.delegate respondsToSelector:@selector(viewWillOut)]) {
[self.delegate viewWillOut];
}
if (self.delegate && [self.delegate respondsToSelector:@selector(viewDidOut)]) {
[self.delegate viewDidOut];
}
}
-(void)removeDelegate {
self.delegate = nil ;
}
UIViewController+Delegate.h 中的代碼在下面,這里實(shí)現(xiàn)了代理
import "NewDelegate.h"
@interface UIViewController (Delegate) <NewDelegate>
@end
UIViewController+Delegate.m 中的代碼是這樣的:
import "UIViewController+Delegate.h"
@implementation UIViewController (Delegate)
-(void)viewWillEnter {
NSLog(@" line:%d method:%s",LINE,FUNCTION);
}
-(void)viewDidEnter {
NSLog(@" line:%d method:%s",LINE,FUNCTION);
}
-(void)viewWillOut {
NSLog(@" line:%d method:%s",LINE,FUNCTION);
}
-(void)viewDidOut {
NSLog(@" line:%d method:%s",LINE,FUNCTION);
}
其實(shí)這是前幾天面試的時(shí)候,幫別人解決問題時(shí)想的一個(gè)方案,他當(dāng)然大喜過望了。希望對大家有用吧!