Objective-C 2.0のプロパティで再びはまる

公開日: : 最終更新日:2010/01/09 iPhone, ,

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
詳解 Objective-C 2.0
ソフトバンククリエイティブ 2008-05-28
売り上げランキング : 3048

おすすめ平均 star
star参考書としておすすめ
starとにかく分かりにくい。
star入門書より強化教材

Amazonで詳しく見る by G-Tools

さらに追伸
自分のクラスのプロパティにアクセスする場合、self.age = 10; のようにselfをつけないと、アクセサメソッドは呼ばれない。
これは Apple のドキュメントの、Objective-C 2.0 プログラミング言語 の Dot Syntax で説明されているが、わかりづらいので注意。
一時期かなりはまっていた。

関連記事

no image

CS 193P

今作っているiPhoneアプリに設定画面を追加しようと思い、UINavigationControll

記事を読む

no image

iPhoneアプリの無料版と有料版を同じソースから作りたい

こども向けに作った自作アプリおんぷちゃんは、習作でもあったのでiPhone無料版、iPhone有料版

記事を読む

no image

[iPhone SDK] iPhone SDK で Singleton

自分でもよく忘れるので、備忘録的に書いてみる。 iPhone SDKで開発をしていて、時々シングルト

記事を読む

no image

EDAMTimestamp と NSDate の相互変換

Evernote SDKを使ったアプリで EDAMTimestamp を DBに格納する前に NSD

記事を読む

no image

Photoshop デザインラボ

Photoshop持っていないが、Amazon で評判が良かったので購入。 感想は後ほど。

記事を読む

ようやくAppStore に Submit

@ITの 日本人がつまずかないためのiPhone開発ポイント を読みながらAppStoreにアプリ公

記事を読む

no image

[iOS SDK] モーダル表示したViewController を取得する

UIViewControllerの presentViewController:animated:c

記事を読む

no image

iPhone SDK開発のネタ帳 Observerパターン

Head First デザインパターンでも2番目に紹介されているObserverパターン。使用頻度も

記事を読む

no image

イタリア語でレビューをいただきました

おんぷちゃん for iPad にイタリア語でレビューをいただきました。 Ottimo! O

記事を読む

Miselu C.24 日本でも12/16からSoftbankで発売開始

KickstarterでMiselu の iPad用キーボード C.24 に出資してみた |

記事を読む

Message

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

自宅をリフォームしてみた

数年前から奥さんに家のリフォームを希望されていた。 ガ

iOS 16 GM版アップデート

遅ればせながら iPhone 11 Pro Maxを iOS16 G

Apple Event Sep 2022 Far Out

毎年恒例の Apple Event が 2022/09/07 に行わ

MY HER-SYS の使い方

子どもが新型コロナウイルスに感染し、隔離を試みましたが結局自分も感染

Transcend TS-HUB5C を買ってみた

前回 USB Type-C ハブを買って返品してしまったので、再度検

→もっと見る

PAGE TOP ↑