gpt4 book ai didi

ios - 为什么要为应用程序委托(delegate)使用属性?

转载 作者:可可西里 更新时间:2023-11-01 05:13:30 26 4
gpt4 key购买 nike

我正在审核一些在许多 View Controller 中具有 appDelegate 属性的代码。

@property (nonatomic, unsafe_unretained) TheAppDelegate *appDelegate;

撇开这种耦合的设计含义不谈,appDelegate 属性与检索应用程序委托(delegate)相比是否有任何好处,除了方便之外:

TheAppDelegate *appDelegate = (TheAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate someMethod];

最佳答案

我有时也这样做,即。为可以使用单例访问方法获取的依赖项声明一个属性:

@class Foo : NSObject
@property(strong) NSNotificationCenter *notificationCenter;
@end

@implementation Foo

- (id) init
{
self = [super init];
[self setNotificationCenter:[NSNotificationCenter defaultCenter]];
return self;
}

@end

优点是您可以在依赖项上获得更松散的耦合。例如,您可以轻松提供自己的模拟实例。在某些情况下,它还使代码更短,编写 _notificationCenter 而不是 [NSNotificationCenter defaultCenter]

我能想到的第三个原因是声明属性使依赖关系显式:通过查看公共(public) API,您知道对象的状态或行为取决于应用委托(delegate)。在类实现中使用单例完全隐藏了这一事实。

但如果您的应用中有许多 Controller 依赖于应用委托(delegate),则可能只是设计缺陷。

关于ios - 为什么要为应用程序委托(delegate)使用属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16177312/

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