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 で説明されているが、わかりづらいので注意。
一時期かなりはまっていた。

関連記事

安くなったPFUのSnapLiteを買ってみた

昔からほしかったが高くて手が出なかったPFUのSnapLiteが2018年3月に販売終了になったらし

記事を読む

no image

Universal アプリのテスト

iPhoneアプリとBluetoothで通信するUniversalなアプリをしばらく作っていたが、よ

記事を読む

no image

[iOS開発本] ARC や Storyboardなどを説明した本

ARC や Storyboard を紹介した良い本を教えてほしい、と会社のマニアな人に質問されたので

記事を読む

no image

Programming in Lua プログラミング言語Lua公式解説書

Lua は参考文献が少ないので、まじめに書こうと思うとこの本に行き着くことになる。 開発者による公式

記事を読む

とてもゲームがやりたくなる本: 3Dゲームをおもしろくする技術

ゲームの作り手向けの本だが、こんな工夫がされているのか! と目からウロコが落ち、ゲームがやりたくなる

記事を読む

no image

タッチ!にほんちずHD Ver.1.1.0 Submit

タッチ!にほんちずHDのバージョンアップ版(Ver.1.1.0)を App Store に提出しまし

記事を読む

no image

[感想] ルールを変える思考法 川上量生(著)

Kindle セールで安く売られていたのと、ゲーマー向けの話が多いということで買ってみた。 非ゲー

記事を読む

[iOS SDK] ObjectAL で EXC_BAD_ACCESS発生

30日から休みだったので、年末は奥さんの実家に帰りつつ、2016年に取り組んでいたアプリの仕上げを行

記事を読む

no image

[iOS] アプリ名にiPadと入れてRejectされた話

新作 iPad アプリを App Store に Submit したところ、Reject されたので

記事を読む

no image

[iOS SDK] iPhone/iPad はサイレントモードにしても音が鳴る

この前、iOS5 を入れた iPad2 で おんぷちゃん for iPad から音が鳴らない、ほかの

記事を読む

Message

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

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

MacBook Pro Mid 2012 2TB HDD換装

子どもの吹奏楽の演奏や、自分のテニスの動画を撮影することが増えてきて

2万円で買える25軸ロボット プリメイドAI 購入

大幅値下げで驚きの安さの25軸ロボットを購入。 https:

HDD交換後「この製品のライセンシングが動作していません」で Photoshop CS4が起動しない問題

HDD交換後に毎度この問題が発生するが、今回も 「この製品のライセン

YouTubeの窪田テニス教室でテニス学習中

15年以上テニススクールに通っているが、スクールにシングルス

LogLocations 1.4.0 写真表示対応

行動ログは取りたいが、何も操作したくない。という自分のようなずぼらな

→もっと見る

PAGE TOP ↑