ラベル ライブラリ の投稿を表示しています。 すべての投稿を表示
ラベル ライブラリ の投稿を表示しています。 すべての投稿を表示

2010年5月22日土曜日

Objective-Cにおける高速列挙

if分に見慣れない構文
   if ( (id)oneObject in nib)
があったので、調べてみると、高速列挙という構文のようです。

高速列挙に関する解説は以下にあります。

CoCoaの素、Objective-Cを知ろう
(第5回 配列とループ処理を理解しよう)
http://www.atmarkit.co.jp/fcoding/articles/objc/05/objc05a.html


Objective-Cでは、C言語のいわゆる通常のforループのほかに、よりオブジェクティブに集合のループ処理を表現するために「列挙子(NSEnumerator)」という仕組みが用意されているそうです。

これを使った場合はコードがやや複雑となるため、高速列挙ということで、for文の構造として表記可能としたようです。

対象となるオブジェクトは、NSArray, NSDictionary,NSSet,NSHashTable, NSMapTable等のNSFastEnumerationプロトコルに準拠するオブジェクトだそうです。

ちなみに、高速列挙ではオブジェクトの変更はできず、変更すると例外が発生するそうです。



構文は次のように定義されています。

for ( Type newVariable in expression ) { stmts }
または
Type existingItem;
for ( existingItem in expression ) { stmts }




以下Appleの解説です。


Objective-C には、コレクションの内容を列挙できる言語機能が提供されています。構文は次のように定義されています。

for ( Type newVariable in expression ) { stmts }
または
Type existingItem;
for ( existingItem in expression ) { stmts }

どちらの場合も、expressionNSFastEnumerationプロトコルに準拠したオブジェクト、すなわち通常は配列または列挙子を生成します(CocoaコレクションクラスのNSArrayNSDictionaryNSSetはこのプロトコルを採用し、NSEnumeratorも同様に採用しています)。

他のオブジェクトのコレクションにアクセスできるインスタンスを持つクラスはすべて、NSFastEnumerationプロトコルを採用できます(NSFastEnumerationプロトコルの実装を参照)。

NSArrayNSSetの場合は、列挙は自身の内容が対象であることは明白です。

それ以外のクラスは、反復処理の対象のプロパティを明確にする必要があります。たとえばNSDictionary、およびCore DataクラスのNSManagedObjectModelは高速列挙に対応しており、NSDictionaryはそのキーを、NSManagedObjectModelはそのエンティティを列挙します。

高速列挙を使用する利点は次のようにいくつかあります。

NSEnumeratorを直接使うなどの手法よりもはるかに効率がよい。
構文が簡単である。
「安全」である。列挙子には変更防止の機能があるため、列挙中にコレクションを変更しようとすると例外が発生します。
反復中のオブジェクトの変更が禁止されているため、複数の列挙を同時に実行できます。

2010年5月15日土曜日

CoCoaリファレンス

CoCoaのリファレンスを作っている人がいました。最新かどうかわかりませんが、参考になります。


http://d.hatena.ne.jp/jjj777/

2010年4月22日木曜日

iPhone ガイドライン/リファレンス

iPhoneヒューマンインタフェースガイドラインの日本語版がないので、諦めかけていたらありました。ちょっと、本買っちゃったよ.....

ドキュメントは基本的に以下にあります。
◆Apple開発者サイト http://developer.apple.com/jp/

しかし、へたにクリックすると英語サイトになったりリンク切れも多く、日本語のドキュメントを見つけることができません。

しかしここに日本語ガイドのリンクがありました。ただしPDFです。
本来はHTMLの方が使い勝手がいいのですが、検索でたまに見つかるだけでした。
ところがURLをいじってみると秘密がわかりました。英語ドキュメントを開いて、URLのwww.apple/com/〜 の間に/jpを入れます(www.apple/com/jp/〜)。そして運がよければ(^^;; 日本語になります。

現在の日本語化の状況はこんな感じです。
■ガイド
■リファレンス
■コーディング How to はこちら
■コードサンプルはこちら
■その他
だけど読んでいる人いるんだよなぁ...不思議
    ■その他 翻訳プログラム
    高校生が一生懸命UIKitリファレンスを訳してくれています。
    だいじょうぶか?Apple??

      iPhone OSのライブラリ

      iPhone OSのライブラリには以下のものがあるようです。詳細は、Appleが発行している「iPhone OSテクノロジーの概要」の「iPhone OS テクノロジー」を参照ください。これでなんとか全体像がつかめました。まだまだ勉強しなくてはならないこはたんまりありそうです.......
      Cocoa Touchレイヤ GUI、イベント、ウィンドウやビュー、プッシュ通知やピアツーピア接続等
      • Apple Push Notification   文字通知、音声警告、アイコンへの数値付与
      • Address Book UI 連絡先作成/編集画面
      • Message UI 電子メールメッセージの作成、編集、キューイングIF
      • MapKit 注釈(ピン等)を付けられるスクロール可能な地図画面
      • Game Kit ボイス/ピアツーピアネットワークIF
      • UIKit コピペ、ウィンドウ、タッチ、テキスト、Web表示、加速度/近接センサ、カメラ、、画像、バッテリ、障害者画面等  詳しくはこちらUIKit Framework Reference)
      ●Mediaレイヤ グラフィックス、オーディオ、動画再生等
      (1)グラフィスク
      • Quartz Core ベクトル(2D)描画エンジン、座標変換、PDF作成等
      • Core Animation アニメーション/合成(他の画像部品にも適用)
      • OpenGL ES 2D/3Dの描画ツール
      (2)オーディオ
      • Audio Toolbox オーディオの再生と録音のためのインターフェイス/データ等
      • Audio Unit オーディオユニットとそのインターフェイス等
      • AV Foundation オーディオの再生と録音のためのインターフェイス
      • Core Audio Core Audio全体で使われるオーディオデータタイプの提供
      • OpenAL OpenAL(オーディオライブラリ)用のインターフェイス等
      (3)ビデオ
      • Media Player ビデオを再生のインターフェイス等
      ●Core Servicesレイヤ 配列や集合、文字列、日時、連絡先、MVCデータモデル、現在地情報の取得等
      • Address Book ユーザの連絡先データベースに直接アクセスするインターフェイス等
      • Core Data データモデルを管理するためのインターフェイス等
      • Core Foundation 基本サービス(一般的なデータ型の抽象化、文字列ユーティリティ、コレクションユーティリティ、リソース管理、環境設定など)。
      • Core Location ユーザの位置を決定するためのインターフェイス等
      • Foundation Cocoa Foundationレイヤ用のクラスとメソッド等。XML要素の抽出、XML->HTML変換
      • Mobile Core Services システムによってサポートされるUTI (Uniform Type Identifier)の定義
      • Store Kit In App Purchaseに関連付けられた会計処理を扱うためのインターフェイス
      • System Configuration デバイスのネットワーク設定を判別するインターフェイス
      • SQL lite ローカルにデータベースを作成する
      ●Core OSレイヤ カーネル環境、ドライバ、仮想メモリ、スレッド処理、ファイル、ネットワーク、セキュリティ等
      • CFNetwork Wi-Fi無線と携帯電話網を使ったSSL,DNS,HTTP/HTTPS/FTP/Bonjour/BSDソケット通信を実行する。
      • External Accessory 接続ハードウェアと通信するためのインターフェイス
      • Security 証明書、公開鍵と非公開鍵、および信用ポリシーを管理
      • IOKit デバイスのインターフェイス(直接のインクルードは不可)
      • System ファイル、I/O, メモリ割当、演算

      UIKit Class hearalkey

      UIKitフレームワークは、iPhone、iPod touch、iPadのAPI構築に必要なクラスを提供します。

      核となる機能セットは以下の通りです。
      なお、個々のライブラリは高校生が訳してくれています。



      ・加速度センサー(UIAcceleration,UIAccelerometer)
      ・障害者用キット(UIAccessibility Element)
      ・バーアイテム(UIBarItem, UIBarButtonItem,UITabBarItem)
      ・グラフィクス(UIBezierPath)
      ・カラー(UIColor)
      ・充電/近接センサー等デバイス(UIDevice)
      ・ドキュメント(UIDocumentInteractionContoller)
      ・タッチ/モーション等イベント(UIEvent)
      ・フォント管理(UIFont)
      ・ジェスチャー(UIGestureRecognizer)
      ・画像表示(UIImage)
      ・テープルデータ加工(UILocalizedindexedCollation)
      ・メニュー(UIMenuController)
      ・階層ナビケーションコントローラ(UINavigationItem)
      ・コピー/ペースト(UIPasteboard)
      ・ポップオーバコントローラ(UIPopoverController: for iPad)
      ・画面サイズ(UIScreen)
      ・スクリーンモード(UScreenMode)
      ・検索表示(UISearchDisplayController)
      ・テキスト分析(UITextRange, UITextInputStringTokenizer, UITextPosition)
      ・タッチ/モーションイベント管理(UITuoch, UIRespnder)
          - UIApplication
          - UIView
      • ウィンドウ管理 (UIWindow)
      • ラベル/テキスト表示 (UILabel)
      • 日付/時刻選択表示 (UIPickerView)
      • タスクの進捗表示 (UIProgressView)
      • 動作中表示 (UIActivityIndicatorView)
      • 画像表示  (UIImageView)
      • タブ/ボタン表示 (UITabBar)
      • ナビゲーション(上)バー (UINavigationBar)
      • (UITableViewCell)

      アプリケーションデリゲートが呼ばれるタイミング

      アプリケーションデリゲートは、以下のような場合に呼ばれ、iPhoneの動作に備えます。
      • アプリケーションの起動
             アプリリケーションの起動時:applicationDidFinishLaunching:
             アプリケーションのアクティブ時:applicationDidBecomeActive:
      • 着信など
             アプリケーション非アクティブ時:applicationWillResignActive:
      • 終話など
             アプリケーションのアクティブ時:applicationDidBecomeActive:
      • ホームボタン押下など
             アプリケーション終了時:applicationWillTerminate:

      CoCoA プログラミング TIPS

      iPhoneでの開発にあたっては、CoCoa のクラスライブラリやメソッド/データ型の知識をもってプログラミングしなくてはなりません。

      しかしながら、Appleの開発者サイトはほとんんど英語。日本語で手短かに理解する方法を得なくてはなりません。

      いろいろ調べていくと、よさそうなサイトがありました。
      「COCOA PROGRAMMING TIPS 1001」