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

関連記事

Apple Watch 対応アプリようやくSubmit完了

ようやく Apple Watch 対応したアプリのSubmitが完了した。 とりあえずの対

記事を読む

no image

いろいろ考えさせられた 「ウェブ×ソーシャル×アメリカ」池田 純一著

TwitterのTLで誰かがつぶやいていて、Amazonを見たらレビューで激賞されていたので買ってみ

記事を読む

no image

Corona SDK 調査2日目

昨日はとりあえずCorona SDKを使って付属のLuaのサンプルアプリをiPhone実機上で動かし

記事を読む

Apple Developer Program 更新 2017

今年も Developer Program を更新。今年は11800円+税だった。そして証明書も更新

記事を読む

no image

[iPhone 開発本] Objective-C 逆引きハンドブック

854ページの大著。C&R研究所というところから出版されている。ページはこちら。目次はこちら

記事を読む

no image

さらに薄いiPhoneケース SwitchEasy Nude Ultra Clear

以前 eggshell for iPhone クリアを購入したが、Homeボタンを押す際などに力が入

記事を読む

Pastebot が OSX 用になっていた

昔使っていたがいつの間にか使わなくなっていた Pastebot が、いつの頃からかiOS版がなくなり

記事を読む

no image

マイコミムック 電子出版 スタートアップガイド

モリサワのMCBookの広告から始まる本。本業としている人には普通の本なんだろうけど門外漢から見ると

記事を読む

LogLocation 1.3.1 で和暦問題に対応しました

4年ぶりに位置情報ログ取りアプリ LogLocations をアップデートしたところ、レビューにて不

記事を読む

かいけつゾロリ 作品名一覧

うちの娘がかいけつゾロリにはまっているためせっせと図書館で予約して借りてますが、人気があるため貸し出

記事を読む

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 ↑