我正在阅读 iOS Big Nerd Ranch 书,其中一个示例显示了如何将观察者添加到 NSNotificaionCenter :
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
现在在orientationChanged中,方向是从NSNotification中发布的对象中检索的:
- (void)orientationChanged:(NSNotification *)note {
NSLog(@"orientationChanged %d", [[note object] orientation]);
}
我的困惑在于这一行:[[note object]orientation]
NSNotification 的对象返回和id,所以这意味着我们在编译时不知道对象的类型是 UIDevice 。但是,我们可以从返回的对象中访问方向,而不会从编译器中出错。编译器如何知道对象类型是 UIDevice 并且访问方向是可以接受的?