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ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

iOS4.2向けの最適化で私がやったこと

2010.12.21 (Tue)

- 宇宙飛行士100の言葉 - http://itun.es/iFT75Tをバージョンアップしました。

その際行った、iOS4.2向けの最適化についてTwitterで質問されたので、全てのケースに当てはまるわけではないと思うけど、こちらにもメモしておきます。誰かの参考になれば。

iOS4.2になって感じた変化。
1)Low Memoryがでやすくなった。
2)スライダーのinsideUpのイベントがそれまでは2回飛んでいたのに、1回になった。

2個目はif文で対応したけど、問題は1つ目。

■Low Memory対応でトライしたこと
1)unloadのメソッドを加えて、objectをマメにリリースするようにした。
 →結果:再度allocするときパワーが必要なうえ、操作感ももっさりしてしまったのでNG。
2)使用するobjectの数を最小限(出来るだけ使いまわす)にして、起動中はリリースしないようにした。
 →結果:これは大成功。
  具体例:
  1)scrollViewの中にWebviewを入れていたものをWebviewのみにして、もともとScrollviewにセットしていたプロパティは、Webviewの中のscrollviewに対して行うことにした。
  2)Webviewは新たにhtmlページを読み込むたびにalloc&autoreleaseしていたのだけど、これを3つのWebviewを使いまわすことにした。
3)複数の処理が重なっている箇所を洗い出して、全ての処理が必ず1つずつ行われるようにした。
 →結果:これも大成功。
  具体例:
  1)HTMLの読み込みを3ページ一緒に行っていたものを配列に格納してから、順に読み込むようにした。
  2)演出に使っているアニメーションも(1)のHTMLの読み込みの間に挟みこみ、アニメーション終了で次のHTMLを読み込むとかして、もうほんとゼッタイ処理が重ならないようにした。
  ※そこで、気が付いたこと。XMLの読み込みとかテーブルのセル作成は割りと処理が軽いぽい。
4)それでもLow Memoryの起きる箇所はHTMLの読み込み中だったので、HTMLの方で使っているjavascriptを軽量化した。
 →結果:かなり違うということが判明。
  具体例:
  1)意外にもコメントアウトされている箇所を削るだけでも処理は早くなった。びびっくり!
  2)複数のjavascriptをhtmlごとに読み替えていたものを最小限に減らした(計算処理と位置調整用の2つのみにした)とか。

と、ここまでやったらもっさり感はほぼ解消できたです。
また、Low Memoryはでても、それで落ちることはなくなったのでした。

Low Memoryがでて落ちるのはLow Memoryのタイミングでobjectが(NSStringとか)がリリースされていているのに、アクセスしようとして落ちちゃうってことで、iOS4.2以降はより厳密にチェックされるようになったという印象。逆にそれ以前は、対象が無くても落ちなかったりしていた。でも、それはやっぱり正しくないよねってきちん(?)と落ちるようになったという感じがしました。

ほぼ雑感な感じですが。
教訓としては、コントロールするオブジェクトは最小限にしてできるだけ使いまわす。そして、処理はひとつずつにする。と、こんな感じでしょうか。

ちなみに、iOS4.2は、iPhoneより、iPod touchの方がLow memoryがでやすい様でした。でも、それぞれで出る箇所が違ったので積んでいるCPUとかグラフィックエンジン?の違いなのかな?という印象。
スポンサーサイト

Xcodeの削除方法

2010.11.09 (Tue)

Twitterのタイムラインで流れていた、Xcodeの削除方法のメモ。
テキストのメモだけじゃ忘れちゃいそうだったので、単なる記録として。

@5mingame2:
@k_katsumi氏から教わった
Xcodeの削除方法(1/2) コンソールで 「sudo /Developer/Library/uninstall-devtools --mode=all」
Xcodeの削除方法(2/2) ~/Library/Application Support/iPhone Simulator/ と ~/Library/Preferences/com.apple.iphonesimulator.plist を削除。で、再起動
※初期設定ファイルの削除し忘れは思わぬトラブルを引き起こしそうなので、メモメモ。他にも念のためXcodeやIBとかの初期設定ファイルも探して削除した方がよさそうな雰囲気。

@k_katsumi:
それでも挙動が不安定の場合は、 ~/Library/Preferences/com.apple.Xcode.plist も消します。Xcodeの設定は再設定が面倒なので僕も何か起こらない限り、普通は消しません。

@5mingame2:
因みに、プロジェクトごとに保存されているレイアウト情報をリセットするには、プロジェクトファイルを右クリック、「パッケージの内容を表示」して、username.pbxuserとusername.perspectivev3を削除する方法が有効っぽい。

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する癖をつけておけば、うっかりも少なくなりますよね。再び感謝感謝です!

XMLの読み込みはTBXMLがいい感じ。

2010.09.18 (Sat)

XMLの読み込み(調査編)でいくつか調べました。

KISSXMLはすぐに実装できちゃった。
滅茶らく。

でも、今後の汎用性を考えてより高速なものはないかと探してみるとTBXMLに出逢った。
◇「TBXMLをためす」
http://xcatsan.blogspot.com/2010_03_01_archive.html

◇TBXMLのサイト
http://www.tbxml.co.uk/TBXML/TBXML_Free.html

TBXMLのサイトからサンプルデータがダウンロードできるので、こちらを試してほしい。
サンプルはIBを使っTableViewで作られているので、分かりやすい。
ワタシはこれで、NSObjectを初めて使ったけど、いいですねー。汎用性とかコードもシンプルにできるとかそゆ部分が。

more »

コードベースで書きつつ、xibを使う方法

2010.09.18 (Sat)

viewcontrollerからインスタンスを作成するときに、一緒にxibファイル名も指定してあげるといい模様。
Interface Builderのどこかに設定があるのかと思っていました。違うのねー。

ViewControllerクラス名 * インスタンス名 = [[ViewControllerクラス名 alloc] initWithNibName:@"xib名" bundle:nil];

設定やデータをファイルに保存する方法アレコレ

2010.09.18 (Sat)

アプリの環境設定やブックマークのデータを保存するには何らかの形でファイルに書き出さなくちゃいけない。
そんな方法があるのかと調べたり、教えてもらったりした。
予想に反していろいろな方法があった。
保存するデータのの形式やボリュームに合わせてどの方法を採用するのかは変わりますが、コレだけ選択肢があるのはいいことです。

■ユーザーデフォルトを使う
参考サイト:備忘録:NSUserDefaultの使い方CommentsAdd Star
http://d.hatena.ne.jp/masatwitte/20100228/1267362218
簡単な設定項目なら、これで十分ですね。

more »

iPad化ノウハウリンク

2010.09.10 (Fri)

「3時間でiPhoneアプリをiPad対応にした」
http://blog.myrss.jp/archives/2010/08/3iphoneipad.html
初iPadするひとは必見!

Obj-c便利リンク

2010.09.09 (Thu)

「NSStringとは」
文字列から数値への強制変換なんかもあって、とても充実。
http://konton.ninpou.jp/program/cocoa/dataobject/nsstring.html

「Objective-Cでタイマー処理ってどうやんの?」
http://level0.kayac.com/2010/07/as3objctimer.php

「UIWebView ネットワークアクセス時の対応」
ステータスバーに表示できるアクティビティインジケーターの書き方がさらりとあって嬉しい。
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
http://iphone-app-developer.seesaa.net/article/131521761.html

「UIScrollView のタッチイベントを取得する」
やってみたけど、「viewForZoomingInScrollView」のところで「accessing unknown 'bodyscrollView' getter method」と怒られる。まぁ、なにか間違っているんでしょう。あとで見直します。
http://d.hatena.ne.jp/spitfire_tree/20100707/1278470269
※その怒られたgetterのことについて書いてある記事があったので、メモ。
「Objective-Cのアクセサの話」
http://blog.livedoor.jp/faulist/archives/1480850.html

「子供UIScrollView以内にタッチのイベントの処理。」
タッチイベント絡みでもう一つ。試していないけど、使うシーンはありそうだから、メモ。
http://ja.w3support.net/index.php?db=so&id=241152

iPhoneアプリでhtmlをバンドルする方法

2010.09.08 (Wed)

htmlバンドルされたhtmlを読み込むだけなら、普通の方法でOK.
NSURLRequest* request =
[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]];
これのURLWithStringのところを[[NSBundle mainBundle] pathForResource:@"test.html" ofType:nil]にすればいい。

でも、jsを使いたかったり、画像を使いたいときには注意が必要。
UIWebViewでバンドルされた、jsを使ったhtmlを表示したいときは、jsのルールを変更しなくちゃ行けないらしい。
「UIWebView を使ってリソースバンドル内の HTML ファイルで、外部 JavaScript や CSS を読み込む」

more »

XMLの読み込み(調査編)

2010.09.07 (Tue)

iPhoneアプリ開発でXML読み込みはわりと必須なきがしているワタシです。
調べてみたけど、いくつか方法があるみたいですね。
どれがベストなんだろうか?

とりあえず、試す前に参考URLを列記。
「もうiPhoneアプリ開発でXMLを読み込む時に失敗しない!!」
http://www.shift-style.org/blog/?p=448
もっと詳しく書いてあるのを見つけた!これがいいや。サンプルもあるし。

「plist(XML形式)ファイルの取り扱い」
http://izoz.blog91.fc2.com/blog-entry-23.html
これが一番簡単そう。画面キャプチャもついていてわかり易いけども、ノードを作るのがこれだと手間が多そうだな。
あと、作成時と修正時での保存先が違うっていうのも、ハマりそう。

「Objective-CでXMLパース NSXMLParserの使い方」
http://moringo.moo.jp/wordpress/?p=334
これが一番現実的なのかな?記事も2010/5/17のものだから、情報も古くないし。

「iPhone使ってます」
http://whiteflag.xsrv.jp/iphone.html
ここの記事にもxmlの読み込みについて少し触れられている。
でも、ファイルのオープンについては書いているけど、パースについては書かれていない。
やっぱり、この方法だけではパースはできないかな?

 | 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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。