gpt4 book ai didi

objective-c - 为什么@selector可以调用实现文件中声明的方法?

转载 作者:行者123 更新时间:2023-12-03 17:38:27 24 4
gpt4 key购买 nike

我在A类的.m文件中声明了(在@interface和@end之间)并实现了一个方法。例如:

- (void)zoneChange:(NSNotification *)note
{
NSLog(@"The system time zone has changed!");
}

在 B 类中,我想在系统区域更改时向观察者发送 zoneChange 消息。

[[NSNotificationCenter defaultCenter] addObserver:anObserver
selector:@selector(zoneChange:)
name:NSSystemTimeZoneDidChangeNotification
object:nil];

上面的代码有效。当用户更改 Mac 上的时区时,会调用 zoneChange 方法。但是,编译器向我发出有关 @selector 的警告:未声明的选择器“zoneChange:”。让我困惑的是,既然zoneChange是一个私有(private)方法,为什么B类中的@selector除了A类之外还能看到它呢?谁能帮我解释一下吗?

最佳答案

私有(private)方法就是这样:私有(private)的。它们仍然存在,只是对外界保密。 Objective-C 中没有内置任何东西来检查从哪里调用方法并在运行时提示;关于未声明选择器的编译时警告正是 B 类未能看到您期望的方法!

关于objective-c - 为什么@selector可以调用实现文件中声明的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30774075/

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