【发布时间】:2016-05-13 17:11:44
【问题描述】:
我有 2 位经理。一个是另一个的孩子。
Manager1.h
@protocol LoginDelegate <NSObject>
-(id) loginOK: (id) response;
-(id) loginKO: (id) response;
@end
@protocol LogoutDelegate <NSObject>
-(id) logoutOK: (id) response;
-(id) logoutKO: (id) response;
@end
@interface Manager1 : NSObject
- (id) init __attribute__((unavailable("You have to use Manager2 instead.")));
-(id) login;
-(id) logout;
@end
Manager1.m
@interface Manager1 ()
@property (nonatomic, weak) id <LoginDelegate> loginDelegate;
@property (nonatomic, weak) id <LogoutDelegate> logoutDelegate;
@end
@implementation Manager1
- (id)initWithDelegate:(id)aDelegate
{
self.logoutDelegate = aDelegate;
self.loginDelegate = aDelegate;
return self;
}
Manager2.h
@protocol OperationDelegate <NSObject>
-(id) operationOK: (id) response;
-(id) operationKO: (id) response;
@end
@interface Manager2 : Manager1
+ (Manager2 *)sharedInstance;
-(id)init __attribute__((unavailable("You have to use initWithDelegate instead.")));
-(id)initWithDelegate:(id)aDelegate;
-(void)doOperation;
@end
Manager2.m
@interface Manager2 ()
@property (nonatomic, weak) id <OperationDelegate> operationDelegate;
@end
@implementation Manager2
- (id)initWithDelegate:(id)aDelegate
{
if (self = [super initWithDelegate : aDelegate])
{
self.operationDelegate = aDelegate;
}
return self;
}
实际上,我可以毫无问题地执行我的方法。 (快速示例):
ViewController.m
let manager2 = Manager2(delegate: self)
manager2.login()
manager2.logout()
manager2.doOperation()
我的代表的回应:
func loginOK(response: id) {
}
func loginKO(response: id) {
}
现在,我想要一个单独的 Manager2。我在 Manager2.m 中尝试过:
static Manager2 *sharedManager = nil;
+ (Manager2 *) sharedManager
{
@synchronized(self)
{
if (sharedManager == nil)
sharedManager = [[self alloc] initWithDelegate:self];
}
return sharedManager;
}
ViewController1.m 它可以响应。
let manager2 = Manager2(delegate: self)
ViewController2.m 不响应任何内容。代表无效。
let manager2 = Manager2.sharedIntance()
我该怎么做?我必须在 sharedInstance 中发送我的代表?非常感谢
【问题讨论】:
-
sharedManager是 ?? ,看不到任何声明。是方法还是属性还是实例变量? -
我更新了我的问题
-
我在考虑是否真的有必要。我的想法是不要多次执行 initWithDelegate。
-
它应该有一个静态变量保存单例,这里没有...
-
:D 查看 Manager1 中的 initWithDelegate 方法,self 未初始化...应该类似于 Manager2 中的 initWithDelegate 方法
标签: swift object delegates singleton