SIHOのプログラミングわーくワク

興味の赴くままに勉強してたら、読み書きできる言語は9個になりました。他にもいくつか気になる言語があったりなかったり?  まだまだ続く、楽しいお仕事わーくワク♪

  • « 
  • 10 
  • 11 
  • 12 
  • 13 
  • 14 
  • 15 
  • 16 
  • 17 
  • 18 
  • 19 
  • 20 
  • 21 
  • 22 
  • 23 
  • 24 
  • 25 
  • 26 
  • 27 
  • 28 
  • 29 
  • 30 
  • 31 
  • »

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

releaseとremoveFromSuperViewとdeallocのこと

2010.10.05 (Tue)

Twitterでのやり取りで@5mingame2さんにとてつもなく大事なことを教わったので、ここにメモとして記しておきます。感謝!感謝!です。
※文章は意味を変更せず、言い回しだけ記事として理解しやすいように書き直しています。変な書き方があったら私のせいです。ごめんなさい。

「Objective-cの「参照カウンタ」という仕組みについて理解しておくとよりよいですよ。」
そんな言葉から始まりました。

■概要説明
表示中のUIViewは、親UIViewに「もう要らない」という意味を込めて [hoge removeFromSuperView]する必要があります。
そうせずいきなり [hoge release] してメモリから削除してしまうと、親UIView側で表示しようとしてるのに、メモリ上に存在しない UIViewを表示する事になるので、メモリアクセスエラーで落ちるのですよ。

■allocするときに autorelease しているかどうかでの違い
>autoreleaseでつくったとき
UIViewを生成する時に autorelease になってれば [hoge removeFromSuperView] した時に参照カウンタが0になってメモリから削除されます。
>autoreleaseなしでつくったとき
autorelease してない場合は、[hoge removeFromSuperView] した時に参照カウンタが1になるだけでメモリからは削除されません。削除するには [hoge release] とします。

■具体例1
>表示するとき
hoge = [[UIView alloc] init] →hogeの参照カウンタ=1
[root addSubView:hoge] → hogeの参照カウンタ=2

>非表示するとき
[hoge removeFromSuperView] →hogeの参照カウンタ=1
[hoge release] →hogeの参照カウンタ=0 →(ここでhoge のdeallocが呼ばれてメモリが解放される)
という流れだったかな?

■具体例2
>表示するとき
hoge = [[[UIView alloc] init] autorelease] →hogeの参照カウンタ=0
[root addSubView:hoge] → hogeの参照カウンタ=1

>非表示するとき
[hoge removeFromSuperView] →hogeの参照カウンタ=0(ここでhoge のdeallocが呼ばれてメモリが解放される)

■Interface Builderをつかったとき
IBで配置したUIViewは、基本autoreleaseと思っていればよいと思います。
ただし、IBOutletの設定をしたらretainされるので、親のクラスのdealloc時にreleaseしてあげます。

■最後に。
Objective-cの参照カウンタはUIViewだけじゃなく、全てのクラスに関わってきます。
参照カウンタの増減があるメソッドがわかってこればなんてことはないので頑張ってねー♪

(ほんとにほんとありがとうございます。がんばりますー)

追記:@ReplicantNexus6さんからのコメント
「subviewに足したあとに、そのビューをReleaseするのが大原則な気がします(^ ^)」

確かに、addSubviewしてすぐにreleaseする癖をつけておけば、うっかりも少なくなりますよね。再び感謝感謝です!

コメント

「removeFromSuperView」でググっていてこちらの記事にたどりつきました。かなり前の記事のようですが、わかりやすくまとめてくれていてとっても参考になりました。ありがとうございました。

コメントの投稿

トラックバック

この記事のトラックバックURL

 | HOME | 

プロフィール

siho_prof

SIHO
しほ

Twitter:
SIHO_o

viva mambo, inc.
iPhone&iPad / Flash / Kinect
使用言語:Objective-C, ActionScript 3.0, Javascript, Lua, PHP, C#, C, C++, WSH。
F-site staff

Solar System Simulator 広報

Web,スマートフォン、Desktopを問わず、アプリ制作が好物。執筆は必要に応じて。お仕事くださいまし。

サイネージ:ガンダムフロント東京・キャラクターフォトスポット設計(2012/4~常設)

アトラクション:富士急ハイランド 戦国BASARA ゲーム設計&プログラミング(2010/7-2012/4にて常設展示)

イントラシステム:「某メーカー研究所KJ法システム」DB,Flash,PHPを含むソリューション設計&DB構築、「美術系専門学校の生徒管理システム」iPadクライアントを含むソリューション設計&DB構築

iPhone/iPadアプリ:某球団試合速報アプリ、『魂を熱くさせる 宇宙飛行士100の言葉』『Mitaka Gallery -てのひら宇宙-』

書籍同梱ソフト:『4次元デジタル宇宙紀行Mitaka』『DVD-ROM&図解 動く! 深海生物図鑑』『DVD-ROM&図解 ハッブル望遠鏡で見る宇宙の驚異』

著書:『世界一わかりやすい Windows 7』『世界一わかりやすい Flash CS3』

検索フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。