【发布时间】:2016-10-09 18:20:42
【问题描述】:
我正在尝试了解事件回调委托是如何工作的。到目前为止,我已经编写了以下代码,顺便说一句工作得很好:
Bridge.h
@protocol BridgeDelegate <NSObject>
- (void) bridgeLock;
@end
@interface Bridge : NSObject
+(instancetype) sharedInstance;
@property (weak, nonatomic) id<BridgeDelegate> bridgeDelegate;
- (void) wipe;
@end
桥.m
@implementation Bridge
+(instancetype) sharedInstance {
static dispatch_once_t pred;
static id shared = nil;
dispatch_once(&pred, ^{
shared = [[super alloc] initUniqueInstance];
});
return shared;
}
-(instancetype) initUniqueInstance {
return [super init];
}
- (void) wipe
{
NSLog(@"lock in bridge called");
if(self.bridgeDelegate)
{
[self.bridgeDelegate bridgeLock];
}
}
@end
插件.h
@interface Plugin : NSObject<BridgeDelegate>
@property (strong, nonatomic) Bridge *bridge;
- (void) pluginInitialize;
@end
插件.m
@implementation Plugin
- (void) pluginInitialize
{
self.bridge = [Bridge sharedInstance];
self.bridge.bridgeDelegate = self;
}
- (void)bridgeLock
{
NSLog(@"lock in plugin called");
}
@end
当我在 applicationDidBecomeActive 中调用以下代码时
Bridge* bridge = [Bridge sharedInstance];
Plugin* plugin = [[Plugin alloc] init];
[plugin pluginInitialize];
[bridge wipe];
我得到以下预期输出:
lock in bridge called
lock in plugin called
现在我的问题:
委托的具体工作情况如何?从某种意义上说,Plugin 只是实现了
bridgewipe()的功能,对吧?首先为什么以及如何调用bridgeLock?这是否与 Bridge 是单例的事实有关。如果我将 Bridge 设为非单例类,最终结果是否相同。
【问题讨论】:
标签: objective-c