2

ファイルorientationChanged:で宣言せずにアクセスできるのはなぜですか? .hApple のドキュメントでメソッドを見つけることができなかったので、継承されたメソッドではないと思います。

#import <UIKit/UIKit.h>

@interface RotationAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

#import "RotationAppDelegate.h"

@implementation RotationAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UIDevice *device = [UIDevice currentDevice];
    [device beginGeneratingDeviceOrientationNotifications];
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:device];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

-(void)orientationChanged:(NSNotification *)note {
    NSLog(@"oriendtationChanged: %i", [[note object] orientation]);
}
4

1 に答える 1

4

渡すメソッド@selector(...)は、ヘッダー ファイルで宣言する必要はありません。実際、実行時に誰も実行しようとしない限り、存在する必要さえありません。が有効なセレクターを生成するには、文字列orientationChanged:で十分です。@selector(...)対応するメソッドが実行時に利用可能である限り (つまり、オブジェクトがそのメソッドをrespondsToSelector:返すYES)、システムはそれを見つけて正しく実行します。

于 2012-08-14T19:45:11.953 に答える