Objective-cで悩んでいたこと −アクセサのことについて−

公開日: : 最終更新日:2014/04/20 iPhone, IT, Mac


 疑問

以前書いたiPhoneアプリを開発していて(Objective-Cを触っていて)疑問に思っていたことの1つ
iPhoneアプリを開発してての疑問 -教えてエライ人!- | PPl@ce

アクセサメソッドの実行に関してドット演算子を使うかどうか。
example.width = 10;
のようにするか、はたまた
[example setWidth:10]
にするか。

正直、(いくらEclipseとかに機能があっても)セッター・ゲッターを書きまくるのはつらいので、このプロパティは非常に助かっています。
ただ、ドット演算子なの? メソッド呼び出しなの?という疑問がありました。

 結論

私と同様に疑問に思っていた人はいたようで、そしてそれに答えてくれている人もいたのでした。
ちゃんとぐぐれよ!という話でした。

で、結論から言うと以下のように簡単にまとめられていた!

簡単にまとめると、明示的にクラス名を指定して変数を宣言してるときはドット記法で、id型で受けるべき時はメソッドでっていうのが一応の使い分けかなー。
Objective-Cのアクセサの話 : As Sloth As Possible

 蛇足的に書いてみる

ドット演算子では厳密な型チェックをおこなっているから以下の様な書き方はできない。

id obj = [array objectAtIndex:0];
obj.title = @"Dynamic Objective-C";

つまり、値として何が入っているか期待できていても確実でない場合は、ドット演算子を使うわけにはいかない。
そもそも、id型のオブジェクトにはドット演算子を適用することはできない。
キャストすれば、ドット演算子も使えるけど何が入っているか確実じゃないならキャストしてもねという感じですしね。

その場合は以下のように書く。

id obj = [array objectAtIndex:0]; // Bookのオブジェクトが入ってると期待できるとする
if ([obj respondsToSelector:@selector(setTitle:)]) {
  [obj performSelector:@selector(setTitle:) withObject:@"サンプル"];
}

1つ謎が解決しました。
ちなみに、Subversionのことについても解決したので、今度記事を書いておこうと思います。

 参考

広告

関連記事

no image

ヘルプ作成で思ったWebサービスの3つの心得 -短文の教え-

最近ヘルプを作って思った3つのこと。 * 1文に複数の内容を書かない 1文に複数の内容を書いてい

記事を読む

no image

CakePHP1.3でテストコード(2) -フィクスチャをいじってみる(テストデータの動的登録)-

cakePHP1.3でのSimpleTestを使ったテストケースの第2回目。 今回は、動的にテストデ

記事を読む

no image

iPhoneアプリ開発 −iOS6からの「写真」へのアクセス問題−

写真を扱うアプリを開発している際に問題になったこと。 ※結構前の話を今更まとめてみる。 * 写真へ

記事を読む

no image

iPhoneアプリ開発 −タッチで線を描く(1)−

* やりたいこと 今回やりたいことは以下の2点。 -(1) 画面をタッチして、指を動かして線を描きた

記事を読む

iPad(Retinaディスプレイモデル)にiOS7を入れてみた

iPadにiOS7を入れてみたので、その報告。 iPhone5にはまだ入れておかないでおこうと思っ

記事を読む

no image

iPhoneアプリ開発 -UIButtonのTouch Down、Touch up Inside、Touch up Outsideの使い方-

* Touch DownとTouch up Inside、Touch up Outsideの違い

記事を読む

no image

ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今のブランチってなんだっけ? -g

記事を読む

no image

CakePHPのモデルのキャッシュではまった -新しく追加したカラムに値が入らない-

タイトルのとおり、ちょこっとCakePHPではまったのでメモ。 * 作業内容 -MySQLで、ある

記事を読む

no image

Androidアプリ開発 -リストをタッチして別ページ表示-

* 前提 -「設定画面」で各種項目を設定。 --Activity:ConfigActivity --

記事を読む

no image

CakePHP1.3でテストコード(1) -モデルのテスト-

CakePHP1.3ではSimpleTestを用いてテストコードを書きます。 ※CakePHP2系で

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑