Objective-C 2.0のプロパティで再びはまる
Objective-C 2.0のプロパティに関してはまったことがあり、これはちょっと詳しく知っておく必要があるなと思い、詳解Objective-C 2.0を購入して辞書的に使っている。
そして昨日再びプロパティではまったので参照。
プロパティにオブジェクトを指定する場合、assign, retain, copy のどれかを指定することを再び学ぶ(P.294)。
そのあたりは大体知っていたのだが、今回は Get しかしないので、 readonly を指定したところ、それではオブジェクトは生成されないことを知った。
詳解Objective-C 2.0には明示的には書かれていないのだが、assign, retain, copy の説明を読むとそう判断することができる。(セッタ用コードが自動で生成されないため)
自分みたいにはまる人が他にもいるかも知れないので、readonly の時の話も書いてもらうと良いかも知れない。
Objective-C 2.0のプロパティはオブジェクトのカウンタ管理とからんでいて結構複雑なので、よく理解してから使った方がよいと思われる。
ところで、詳解Objective-C 2.0のP295の「(d) copyを指定した場合のセッタの定義」は、[name release] が書かれているが、copy の場合は必要ないのではないだろうか。★ソフトバンククリエイティブのページを見てみたが、正誤表は見つからなかった。
木下さんのダイナミックObjective-C 104回めを見てもやはり必要なさそうだが。確認が必要。
しかしObjective-C 2.0のプロパティは個人的に結構難しい。@property, @synthesizeから生成されるコードがいまいち想像できないし、オプションで挙動も大きく変わってしまうので初心者は使わない方がよいように思われる。
実際、iPhone Cool Projectsの2章でも、「自分はプロパティは使わない」と書いている著者がいた。同じようにはまった経験があるのではないだろうか。
ちなみにiPhone Cool Projectsはとてもおもしろい。読み終わったら紹介したい。
追伸
★の件だが、紹介Objective-Cの著者の方にメールしてみたところ、非常に丁寧な回答が返ってきて、自分が間違っていることが分かった。
Appleのドキュメントによると、copy の場合もrelease が必要になる。
value に入っていたオブジェクトを release しておかないと、メモリリークになってしまうとのこと。
木下さんにも確認してみたところそれが正しいことが分かり、ダイナミックObjective-C 104回目の記述は修正されることになった。
こうやって著者の方々とやりとりができるのは本当にありがたい。2人とも非常に丁寧で、人柄が伝わってきた。
ありがとうございました。
詳解 Objective-C 2.0 | |
![]() |
ソフトバンククリエイティブ 2008-05-28 売り上げランキング : 3048 おすすめ平均 |
さらに追伸
自分のクラスのプロパティにアクセスする場合、self.age = 10; のようにselfをつけないと、アクセサメソッドは呼ばれない。
これは Apple のドキュメントの、Objective-C 2.0 プログラミング言語 の Dot Syntax で説明されているが、わかりづらいので注意。
一時期かなりはまっていた。
関連記事
-
-
iPadアプリ おんぷちゃん が雑誌に紹介されました
いろいろあって、iPhone/iPad アプリのおんぷちゃん がムジカノーヴァ2011年2月号で紹介
-
-
Head First デザインパターン
@akabekobeko 氏の書き込みに感化されて買ってみた。たしかにこれはいい。 人にものを教えよ
-
-
iPhoneとBluetooth連携できる体重計 タニタ RD-900
iPhone と連携できる体重計には以前から興味があって、Withings の WS-30 を狙って
-
-
詳解 Objective-C 2.0 改訂版 2010年12月17日発売
まだ書店で遭遇できてないけれども荻原さんの詳解 Objective-C 2.0の改訂版が発売されてい
-
-
必ず結果が出るブログ運営テクニック100 を読んでみた
ネタフルのコグレマサト氏と和洋風のするぷ氏のブログ本がTLで話題になっていたので買ってみた。 売れて
-
-
GTD用にOmniFocusを購入
半年くらいMacBookとiPhoneでOmniFocusを使っている。 なかなか良いので、紹介して
-
-
Photoshop のバッチ処理でiOSアプリアイコンを一括作成する
毎回苦労しているiOSのアプリアイコン作成。今回はPhotoshopのバッチで作成してみる。前回は
-
-
Pebble x テニスセンサーSSE-TN1
2014年のはじめにテニスセンサーの記事を書いたが、当時はまだセンサー対応ラケットが少なく、最近よう
-
-
[iOS 開発本] iOSフラットデザインの作法
iOS7で採用されたフラットデザインに関して、個人的には Windows 8のMetroのイ
-
-
REWORK : Jason Fried & David Heinemeier Hansson (邦題: 小さなチーム、大きな仕事) レビュー
< 百式の人が発売前の REWORK を紹介していて、出たら読もうと思っていたらいつの間に