iOSアプリの互換性を確保する その1の続きです。
2)新しく追加されたメソッドを使う。
NSObjectの以下のメソッドを使って、追加されたメソッドの有無を確認する事で、新しいOSでは追加された機能を使って、古いOSでは前のままという事ができます。
- (BOOL)respondsToSelector:(SEL)aSelector
使い方は以下のようになります。
BOOL result = [instance respondsToSelector:@selector(メソッド名)];
instanceの部分はメソッドが追加されたオブジェクトのインスタンス変数です。
あまりいい例では無いかも知れませんが、iOS4.0で追加された、UIApplicationクラスのpresentLocalNotificationNowメソッドを例に挙げると、以下のようになります。
UIApplication *app = [UIApplication sharedApplication];
if( [app respondsToSelector:selector(presentLocalNotificationNow:) )
{
// iOS 4.0以降で実行されていてpresentLocalNotificationNowが使える。
}
else
{
// iOS 4.0以前で実行されていてpresentLocalNotificationNowが存在しない。
}
色々なクラスで挙動を分ける場合は、resultの値をUIApplicationDelegateのプロパティにでも持っておけば、アプリ全体から参照できる為、便利です。
次回は「3)deprecatedとなったメソッドやプロパティの対応」です。
※iPhoneアプリ開発に関する投稿を今から始めるiPhoneアプリ開発にまとめました。
最近のコメント