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

林信行氏 iPhoneの衝撃 セミナー 2009/10/07@代々木 に参加してきた

いまさらながら、2009/10/07(水)に行われた、林信行氏 iPhoneの衝撃 セミナーのレポ

記事を読む

no image

iPhoneアプリ 「リズムくん」 Ver.1.1 アップデート

リズムくん Ver.1.0ではまずは8分音符までの問題でリリースしてみましたが、やはりより難しい問題

記事を読む

no image

WWDC 2011 に行ってきた

WWDC 2011に行ってきたときのメモなど。公開が遅れているうちにWWDC 2012のチケット

記事を読む

simplism 0.7mm Ultra Thin Case for iPhone 6 Plus(5.5inch)購入

Amazonを見ているとiPhone 6 Plus の筐体はそれなりに傷が付きや

記事を読む

2015年に買ったりもらったりリリースしたりしたもの振り返り

年末なので2015年を振り返ってみよう企画。前半は仕事で死んでいたが、思ったよりもいろいろ活動してい

記事を読む

no image

SwitchEasy NUDE for iPhone5 を買ってみた。まだ様子見の方がよさそう

SwitchEasy NUDE for iPhone 5 UltraClearSwitchEasy

記事を読む

[iOS SDK] iTunes Connect ではまる

iOS8リリースに合わせてiTunes Connect のUIが大幅に変わっており、下記のページの方

記事を読む

英辞郎第7版からアルクのSVLを EverLearn に取り込む方法

英辞郎 第七版(辞書データVer.136/2013年1月8日版)アルク企画開発部 アルク 2013

記事を読む

no image

iPhone 3GS/4 で使える Bluetooth キーボード ELECOM TK-FBP017BK

フォローしている人のつぶやきで発見した記事で知ったキーボード。iPhone4ユーザー必携Blueto

記事を読む

iOS デバイスサポート最終バージョン

iOS9からGKSession over Bluetoothが無効に なってしまったので Multi

記事を読む

Message

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

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

TUNEWEAR ALMIGHTY DOCK nano1 USB3.2 5in1ハブ を買ってみた

ちょうどiPhone のリストアを実行中で、2時間程度かかっていたた

Apple Developer Program 更新 2022

今年も Apple Developer Programを更新した。こ

M1 MacBook Air を macOS Monterey にアップデート

Xcode 13.3 アップデート するために、macOS

Xcode 13.3 アップデート

iPhone 11 Pro Max の iOSを15.4に上げてしま

[Apple Event]最高峰を解禁。

2022/03/09 3:00AM JST にApple Event

→もっと見る

PAGE TOP ↑