我在ViewController中使用此firebase块进行用户身份验证:
[ref authUser:@"x@y.de" password:@"xyz" withCompletionBlock:^(NSError *error, FAuthData *authData) {
if (error) {
[self goOffline];
} else {
[self handleFBUser: authData completion:completion];
}
}];
但是如果我关闭VC,VC就会被隐藏但仍然在内存中(NSLog仍会在控制台中每秒显示一条消息)。
更新
经过一些更多测试后,我发现如果firebase登录数据错误,可以解除VC,
authData是nil
但是如果登录数据正确且
authData不是nil
VC不能被解雇。UPDATE2
现在我改变了这样的代码:
__weak FirebaseVC *weakSelf = self;
__weak void(^weakHandleResult)();
void(^handleResult)();
weakHandleResult = handleResult = ^(NSError *error, __weak FAuthData *firebaseUser) {
if (error) {
completion(error, Nil);
} else {
[weakSelf handleFBUser: firebaseUser completion:completion];
}
};
[ref authUser:@"x@y.de" password:@"xyz" withCompletionBlock: handleResult];
但结果相同。
UPDATE3
杰伊把我带到了正确的方向。我从另一个VC块调用身份验证,并且我必须将self设置为" __ weak weakself = self"并使用weakself作为在其他VC中调用身份验证的块中的函数。