2011年3月10日木曜日

インスタンス変数へのアクセス

appleのサンプルで使用される構造体ポインタ演算子( または、アロー演算子: -> )についてのメモ。

プロパティへのアクセス方法
ドット構文を使うと、構造体の要素にアクセスするときと同じパターンを使ってプロパティにアクセスできます。*1

ドット構文は単なる「シンタックスシュガー」であり、コンパイラによってアクセサメソッドの呼び出しに変換されます(そのため実際にはインスタンス変数に直接的にアクセスするわけではありません)。*1

以下のような理解でいいのか?
- プロパティには直接アクセス出来ない。
- しかし、構造体ポインタ演算子(->)を使うと、アクセサメソッドを経由しないで直接インスタンス変数にアクセスすることが出来る。

インスタンス変数がレシーバでないオブジェクトに属する場合は、オブジェクトの型を静的な型定義によってコンパイラに明示しなければなりません。静的に型定義したオブジェクトのインスタンス変数を参照するには、構造体ポインタ演算子(->)を使用します。*2

参照:
*1
objective-c 2.0 プログラミング言語 -> プロパティ -> 概要 -> プロパティへのアクセス
*2
objective-c 2.0 プログラミング言語 -> クラスの定義 -> クラス実装 -> インスタンス変数の有効範囲

2011年2月28日月曜日

ユニットテストフレームワークを使う

OCMock のサイト

プロジェクトへの追加方法
stackoverflow / OCMock for iPhone (iOS4, XCode 3.2.3)

ただし、以下のように文字だけで説明している。
Delete ocmock.framework, the copy file phase, and any search path linking to ocmock header.

check out the latest version from ocmock svn repo : http://svn.mulle-kybernetik.com/OCMock/trunk

ダウンロード元は、svn の他に OCMock のサイト にも .dmg ファイルのダウンロードリンクがある。

Build the OCMockPhoneSim target

1.
ダウンロードしたフォルダ内にある OCMock.xcodeproj を開く。

2.
画像のように概要を設定する。




Copy the libOCMock.a and Headers folder in your project folder
OCMock プロジェクトフォルダ内の、 build -> Release-iphonesimulator フォルダの中身(Headers フォルダとlibOCMock.a)を自分のプロジェクトへコピーする。

add the libOCMock.a to your framework and add a link to the headers folder in your target library search path.
1.
プロジェクトへ追加する。
グループとファイル -> Frameworks を右クリック
Frameworks -> 追加 -> 既存のフレームワーク -> (その他を追加 ボタンを押下) 先ほどビルドした libOCMock.a を追加する。

2.
ヘッダ検索パスと他のリンカフラグを設定する。
グループとファイル -> (新しく追加したテスト)ターゲット -> (Unit Test Bundle)名 -> 情報を見る をクリックする。

3.
ヘッダ検索パスは、Headersフォルダへのパスを設定する。
ex) $(SRCROOT)/OCMock/Headers

リンカフラグ は次を設定する。
-all_load

---------
xcode のセットアップはapple のユニットテストのページ等を参考にするみたい。
Unit Testing Applications

2011年2月24日木曜日

アルバムの一覧をサムネイルで表示する

Contains the URL of a thumbnail of a photo or album cover.

<media:thumbnail> エレメントにあるURLを利用してアルバムを一覧表示できる。

参照:
Picasa Web Albums elements reference -> Media RSS (media namespace) element reference -> media:thumbnail

GDataObject の基本

GDataObject についての説明を picasa の場合で考えてみる。
Servers respond to client GData requests with feeds that include lists of entries.

Each feed and entry is composed of elements. Elements represent either standard Atom XML elements, or custom-defined GData elements.

Feeds, entries, and elements are derived from GDataObject, the base class that implements XML parsing and generation.

おおよそのイメージはこんな感じなのだろうか。



参照:
gdata-objectivec-client -> Wiki -> GDataObjeCIntroduction -> Google Data APIs Basics

2011年2月2日水曜日

オブジェクトの所有権の取得 retain

受け取ったオブジェクトを破棄したくない場合もあります。たとえば、インスタンス変数にオブジェクトをキャッシュする必要がある場合です。
このような場合は、オブジェクトが不要かどうかを知っているのは自分だけであるため使用中にオブジェクトが破棄されないことを保証する機能が必要となります。これは、retainメッセージを使って行います。

 – (void)setMainSprocket:(Sprocket *)newSprocket {
 if (mainSprocket != newSprocket) { // 古いインスタンス変数を確実に解放するための判定を行う
 [mainSprocket release];
 mainSprocket = [newSprocket retain]; // 参照カウンタが1増える
    }
 }

---------------
参照
Cocoaメモリ管理プログラミングガイド オブジェクトの所有権の取得

2011年1月15日土曜日

ファイルを素早く開く(定義、実装にジャンプする)

ファイルを素早く開く(定義、実装にジャンプする)ショートカット
⌘ + shift + d

2011年1月7日金曜日

キーボードをしまう

キーボードをしまうには、現在ファーストレスポンダになっているテキストベースビューのresignFirstResponderメソッドを呼び出します。
Text Viewがファーストレスポンダの状態でなくなると、現在の編集セッションは終了し、そのことがデリゲートに通知されます。
そして、キーボードが消えます。つまり、myTextFieldという変数が、現在ファーストレスポンダになっているUITextFieldオブジェクトを指す場合、キーボードをしまうには以下のコードを実行するだけです。
[myTextField resignFirstResponder];
---------------------------------
以下のような状態の場合、












「LogIn」ボタンを押下した時、キーボードが隠れるようにするためにはログインアクション実行後、テキストフィールド(この場合は、ID と PASSWARD を入力するフィールド)のresignFirstResponderメソッドを呼び出す。

参照:
iPhone アプリケーションプログラミングガイド テキストとWeb->キーボードの管理->キーボードをしまう