Objective-cで悩んでいたこと −アクセサのことについて−
疑問
以前書いたiPhoneアプリを開発していて(Objective-Cを触っていて)疑問に思っていたことの1つ
iPhoneアプリを開発してての疑問 -教えてエライ人!- | PPl@ce
アクセサメソッドの実行に関してドット演算子を使うかどうか。
example.width = 10;
のようにするか、はたまた
[example setWidth:10]
にするか。
正直、(いくらEclipseとかに機能があっても)セッター・ゲッターを書きまくるのはつらいので、このプロパティは非常に助かっています。
ただ、ドット演算子なの? メソッド呼び出しなの?という疑問がありました。
結論
私と同様に疑問に思っていた人はいたようで、そしてそれに答えてくれている人もいたのでした。
ちゃんとぐぐれよ!という話でした。
- 疑問に思っていた人:セッター – poohtarouの日記
- 答えを教えてくれた人:Objective-Cのアクセサの話 : As Sloth As Possible
で、結論から言うと以下のように簡単にまとめられていた!
簡単にまとめると、明示的にクラス名を指定して変数を宣言してるときはドット記法で、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のことについても解決したので、今度記事を書いておこうと思います。
参考
広告
関連記事
-
github-flowを使っての開発(3) -1つのプロジェクトを複数人で開発-
今まで2回ほどgithub-flowをもとにした開発の流れを書きました。 今回は、複数人で開発をする
-
Google Appsで独自ドメインメールの利用
独自ドメインでメアドを持ちたかったのでGoogle Appsを利用してみました。 その各種設定の覚
-
第二回Androidテスト祭り参加記録 -祭りに参加してきたよ-
久しぶりに勉強会に参加してきました。 参加してきたのは「第二回Androidテスト祭り(4/28)
-
ヘルプ作成で思ったWebサービスの3つの心得 -短文の教え-
最近ヘルプを作って思った3つのこと。 * 1文に複数の内容を書かない 1文に複数の内容を書いてい
-
iPhoneアプリ開発 −遷移先のViewControllerに値を引き継ぎたい−
例えば、トップページに複数個のボタンがあって、「A」と「B」というボタンを押下した際に、同じView
-
iPhoneアプリをヒットさせるために大事な5つのこと
巷にはたくさんのiPhoneアプリがたくさんあります。 そして、毎日新しいアプリがリリースされていま
-
iPad(Retinaディスプレイモデル)にiOS7を入れてみた
iPadにiOS7を入れてみたので、その報告。 iPhone5にはまだ入れておかないでおこうと思っ
-
Jenkins + DeployGate(1) -DeployGateでAndroidアプリ開発-
TestFlight for Androidが発表されて1ヶ月ぐらいたちますが、音沙汰がありません。
-
Selenium2.0でUIテスト(1) -まずはPHPでやってみる-
久しぶりにSeleniumを触ってみました。 Selenium2.0から色々と変わったみたいで少々
-
Androidアプリ開発 -画像処理をC言語で高速化-
* 画像を扱う際の問題(1):計算処理の遅さ 前回、セピア画像にする方法を書きました。