Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2010-11-10

実行時にiPadとiPhoneの処理を分けるための関数作成

01:15 | はてなブックマーク - 実行時にiPadとiPhoneの処理を分けるための関数作成 - iPhoneアプリ開発まっしぐら★

かなり小ネタですが、最近更新できてなかったので。

iPadとiPhoneとで実行時に処理を分けたいときの関数を↓のようなかんじで作りました。

static int s_isiPad = -1;
BOOL isiPad() {
  if ( -1 == s_isiPad ) {
    s_isiPad = [[UIDevice currentDevice].model hasPrefix:@"iPad"] ? 1 : 0;
  }
  return s_isiPad;
}

基本的にはUIDeviceのmodelプロパティを確認しているというだけで、iPadの実機でもシミュレータでも対象となるよう、"iPad"という文字列を完全一致でなくhasPrefixでチェックしています。

また、一度確認が取れたら、それ以降はモデル名の取得とか文字列比較とかをするのは無駄になるので、static変数に結果を格納して2回目以降はそれを返すというかんじです。


実際にこの関数を使う際には、

if ( isiPad() ) {
  // iPadの処理
} else {
  // iPhoneの処理
}

という感じです。

2回目以降はBOOL型のstatic変数を見るだけなので時間的なロスはあまりないと思います。


iPadの処理もiPhoneの処理も同じアプリ内に入るので、iPadでもiPhoneでも同じアプリを配信できるというメリットはありますが、アプリサイズはその分大きくなるというデメリットがあります。



iOS3.2以上で利用できる更新版

このあと、皆様からiOS3.2以降なら UI_USER_INTERFACE_IDIOM() が便利ですよーというのを教えていただきまいたので、更新版が以下です。

BOOL isiPad() {
  return UIUserInterfaceIdiomPad == UI_USER_INTERFACE_IDIOM();
}

obysobys2010/11/11 08:16わたしはUI_USER_INTERFACE_IDIOM()で判別していました。
この方法もいいですね。

tokoromtokorom2010/11/11 10:14ありがとうございます!
UI_USER_INTERFACE_IDIOM()いいですねー。
教えていただき関数の中身を見てみたら、基本はUIDeviceのuserInterfaceIdiomを確認し、そのメソッドが見つからなければiPhoneという2段階の判定がされていて有用そうです!

KassiKassi2011/05/15 22:13I'm out of league here. Too much brain power on dspilay!

nglquqgtsbnnglquqgtsbn2011/05/16 10:533s6WgQ <a href="http://wgzeodjmmihk.com/">wgzeodjmmihk</a>

udzkplbgvudzkplbgv2011/05/17 11:20UVFhpV , [url=http://bsoewuqcwvyf.com/]bsoewuqcwvyf[/url], [link=http://urhlrruphrgl.com/]urhlrruphrgl[/link], http://mngijszlwmod.com/

cezsmqyddawcezsmqyddaw2011/05/30 00:01hbjizT , [url=http://xqxrwjqvfvbr.com/]xqxrwjqvfvbr[/url], [link=http://gxhjfdgoyewz.com/]gxhjfdgoyewz[/link], http://uyafzloevdhu.com/