gpt4 book ai didi

ios - UIApplication 的委托(delegate)属性

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

于是开始学习Core Data for iOS,并把这一段代码写了出来:

- (void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];

id delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *objectContext = [delegate managedObjectContext];

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Album"];
//An array of our sorted Album objects by date in ascending order
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];

NSError *error = nil;

NSArray *fetchedAlbums = [objectContext executeFetchRequest:fetchRequest error:&error];

self.albums = [fetchedAlbums mutableCopy];

[self.tableView reloadData];
}

我的问题是这一行的目的是什么:

id delegate = [UIApplication sharedApplication].delegate;

我知道一个事实,对于委托(delegate),您需要将特定对象的当前实例传递给委托(delegate)属性,委托(delegate)属性将该对象设置为另一个对象的委托(delegate)。我的问题是你什么时候这样做:

id delegate = [UIApplication sharedApplication].delegate;

哪个对象被传递给 delegate 属性? sharedApplication 方法返回我假设的应用程序的单例实例,然后您将获得该应用程序的单个实例的 delegate 属性。该委托(delegate)是否与 AppDelegate.h/AppDelegate.m 文件中使用的委托(delegate)相同?

如果该委托(delegate)属性与 AppDelegate.h/AppDelegate.m 文件中使用的属性相同,则不应在AppDelegate.m 文件中的 viewDidLoad 方法,我们在委托(delegate)属性中传入 AppDelegate.m 的当前实例,类似于什么我们为 tableView 做的:

self.tableView.delegate = self. 

我看不到这一行中 delegate 属性在哪里完成:

id delegate = [UIApplication sharedApplication].delegate;

最佳答案

您不需要将您的 AppDelegate 指定为您的应用程序的委托(delegate),因为它会自动为您完成。

在 objective-c 中,您可以查看 main.m 函数,您可以在其中找到提及您的 AppDelegate 类:

int main(int argc, char *argv[])
{
@autoreleasepool {
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
return retVal;
}
}

在此调用之后,系统会将类 AppDelegate 的实例设置为您的应用程序的委托(delegate)。

在 Swift 中,main.m 丢失了,这就是为什么在委托(delegate)类声明之前总是有 @UIApplicationMain 的原因:

@UIApplicationMain
final class AppDelegate: UIResponder, UIApplicationDelegate {
}

因为 UIApplication.sharedApplication() 是单例,UIApplication.sharedApplication().delegate 总是返回相同的 AppDelegate 实例。

因此,如果您从一个 View Controller 修改 AppDelegate 中的某些属性,您可以确保其他 View Controller 可以访问修改后的版本。您可以通过实现一个简单的计数器并检查您是否始终可以读取最新值来轻松地自己验证它:)

关于ios - UIApplication 的委托(delegate)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32170600/

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