定义一个不被取消引用的委托?

define a delegate that not get dereferenced?

现在我正在实施 FIRMessaging 以接收来自 Firebase 云消息传递的通知。我通过在 firebase 控制台中创建一个新项目进行了测试,然后注册了我的包 ID,我下载了配置文件并复制到我的项目(单视图应用程序),然后我安装了必要的 pods。在我的 AppDelegate 中,我使用 FIRMessaging 获取通知,使用 Firebase 核心连接到 firebase。

我可以完成这项工作。我在我的 AppDelegate 中使用 <FIRMessagingDelegate> 协议并实现它定义的方法:

1.- messaging:didReceiveRegistrationToken: 在应用程序启动时接收令牌。

2.- messaging:didReceiveMessage: 从 firebase 接收通知。

我在 application:didFinishLaunchingWithOptions

中编写了下一个代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[FIRApp configure];
firebaseDelegate * delegateObject = [[firebaseDelegate alloc] init];
FIRMessaging * message = [FIRMessaging messaging];
message.shouldEstablishDirectChannel = YES;
message.autoInitEnabled = YES;
message.delegate = self;
NSLog(@"TOKEN : %@",message.FCMToken);

NSLog(@"Firebase initialization completed");
return YES;

}

这是我的 firebaseDelegate.h

#import <Foundation/Foundation.h>
#import <FirebaseMessaging/FIRMessaging.h>
@interface firebaseDelegate : NSObject <FIRMessagingDelegate> 
@end

这是我的实现

#import "firebaseDelegate.h"
@implementation firebaseDelegate 

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken
{
    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:fcmToken forKey:@"token"];
}

-(void)messaging:(FIRMessaging *)messaging didReceiveMessage:(FIRMessagingRemoteMessage *)remoteMessage
{
    NSLog(@"Message: %@",[remoteMessage appData]);
}
@end

这是我之前提到的第二种方法的实现(在我的 AppDelegate 中):

-(void)messaging:(FIRMessaging *)messaging didReceiveMessage:(FIRMessagingRemoteMessage *)remoteMessage{
NSLog(@"Message: %@",[remoteMessage appData]);}

当我发出通知时,我收到了它并像这样出现在日志中

但是当我尝试定义一个符合这两种方法的 class 并为这个 class 的实例更改委托(第 message.delegate = self; 行)时,如下所示:

message.delegate = delegateObject;

我在日志中得到这个:

该对象的引用似乎被销毁了,当使用 AppDelegate (self) 时它工作正常,我做了一些重新搜索,发现 AppDelegate 始终存在。

我如何创建一个 class 可以作为委托并且不会被取消引用的 class?

将您的代表添加到 AppDelegate 中,如下所示。

@interface AppDelegate : UIResponder <UIApplicationDelegate>{

firebaseDelegate * delegateObject;

}
@end

那一定是工作了