gpt4 book ai didi

iphone - 使用 AppDelegate 共享数据

转载 作者:可可西里 更新时间:2023-11-01 03:28:10 25 4
gpt4 key购买 nike

我找到了一些资源,它们解释了如何使用 AppDelegate 在 iOS 应用程序中的对象之间共享数据。我已经毫不费力地实现了它,在我的情况下它看起来是一个很好的方法。考虑使用 AppDelegate 可以做什么,我想知道应该在哪里画线。

显然还有其他方法可以share data across view controllers , 使用 Singleton objects , 和 NSUserDefaults . 什么时候使用AppDelegate共享数据合适?在我目前的情况下,我使用这种方法来存储用于推送通知的appleDeviceToken。当用户登录或注销应用程序时,我会使用该 token 。


在 MyAppDelegate.h 中我声明了属性:

@property (nonatomic, retain) NSString *appleDeviceToken;

在 MyAppDelegate.m 中我合成了 appleDeviceToken 然后设置它:

@synthesize appleDeviceToken;    

------------------------------------------------------

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSString *devToken = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
appleDeviceToken = devToken;
}

然后,在我的 LoginViewController.m 中检索它并将其发布到我的服务器:

  NSString *urlForDeviceTokenPost = [NSString stringWithFormat: @"/api/users/%i/appleDeviceToken", userId];

MyAppDelegate *appDelegate = (MyAppDelegate*) [UIApplication sharedApplication].delegate;
NSString *appleDeviceTokenStr = appDelegate.appleDeviceToken;

AppleDeviceToken *appleDeviceToken = [[AppleDeviceToken alloc] init];
appleDeviceToken.deviceToken = appleDeviceTokenStr;

[[RKObjectManager sharedManager] postObject:appleDeviceToken delegate:self];

目前效果很好,但这是理想的方法吗?我还应该知道什么?

最佳答案

当数据和对象确实是全局的和/或不能进一步向下推到图表中时。通常不需要这种高级别的存储。同样,您的实现通常应该对应用委托(delegate)几乎一无所知——还有什么比单例更糟糕的呢? God-Singleton :) 如果应用程序委托(delegate)很复杂,则说明出了问题。如果应用程序委托(delegate)的接口(interface)对您的许多实现可见(通过 #import),或者它们直接向它发送消息,则说明有问题。

不需要(惯用的 ObjC)单例——只有一个应用委托(delegate)实例。

NSUserDefaults 用于持久化小值(顾名思义)——共享的能力是一个副作用。

由于在这种情况下数据已由 UIKit 发送到应用程序委托(delegate)中,因此可能是存储数据或对象表示的好地方。您还可以考虑将这些消息转发给适当的处理程序。重要的一点——在大多数情况下,您希望初始化沿着对象图向下流动,并从可能的最低点开始流动(例如,与许多引用回应用程序委托(delegate)的对象相反)。所以你可能会看到应用程序委托(delegate)设置了一个顶层 View Controller 的模型,但是 View Controller 然后可以设置它推送的 View Controller 的模型。通过这种方式,您将减少依赖性和控制流,因果关系将更容易追踪,并且您将能够更轻松地对其进行测试——不受大量全局状态的影响。

关于iphone - 使用 AppDelegate 共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12046060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com