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アプリにAboutBoxを実装

iPhoneアプリにAboutBoxを実装するためのメモ。 今回、自分のiPhoneアプリにAbou

記事を読む

no image

そのまま使えるiPhoneゲームプログラム

書店で見かけて立ち読みしてみた。 ゲームで使いそうな小技が紹介されている。ゲーム向けなので、Open

記事を読む

no image

[iPhone SDK] 自作iPhone アプリのアイコンをつや消しにする

iPhone のホーム画面に表示されるアプリアイコンは自動的に てかてか つやつや 効果を付与されて

記事を読む

no image

Beginning iPhone 3 Developmentの続編が出るらしい

iPhone開発の入門書としていま一番良いと個人的に思っている、Apressの Beginning

記事を読む

no image

iPhone SDK 3.0 の問題

今日からectoで更新をしてみる。 3/16(月)にUSでiPhone SDK 3.0 が発表され、

記事を読む

[洋書] The Day of the Triffids トリフィドの日

The Day of the Triffids (RosettaBooks Into Film)Jo

記事を読む

no image

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

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

記事を読む

no image

トレードオフ ケビン・メイニー著

なぜか序文を書いただけのジム・コリンズの名前の方が表示が大きいケビン・メイニーの本。 上質(Qua

記事を読む

no image

メイドインジャパンとiPad、どこが違う? 世界で勝てるデジタル家電 感想

西田宗千佳氏の本はいつも面白い。 今回も予想に違わず面白かった。 自分も同じような情報は知っているは

記事を読む

no image

[iPhone開発本] オライリー iPhoneアプリケーション開発ガイド 感想その1

面白そうだったので発売日に買ってみた。1995円と安いのもすばらしい。 しかしタイトルは一ひねりした

記事を読む

Message

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

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

ポモドーロテクニック用物理タイマーならTime Timer

会社ではなかなか自由に時間を使えないが、家で読書や作業をする

DELL 32インチディスプレイ U3223QE 購入

Dell U3223QE は解像度 3840x216

WWDC 2023 Vision Pro発表

2023/6/5 (日本時間 2023/06/06 2AM)のWWD

M1 MacBook Air を Venturaにアップデートする

M1 MacBook Air を macOS Montere

iOS16でaurioTouch の inBufferFramesが1になる

https://developer.apple.com/librar

→もっと見る

PAGE TOP ↑