Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2010-04-04

autoreleaseで解放を遅延した場合の使用メモリ変化のグラフ

| 18:45 | はてなブックマーク -  autoreleaseで解放を遅延した場合の使用メモリ変化のグラフ - iPhoneアプリ開発まっしぐら★

で、release/autorelease周りのパフォーマンス計測を行いましたが、あとはautoreleaseで解放を遅延した場合の使用メモリを気にする必要がありそうです。


といっても特にひねる部分もなく、autoreleaseで解放を遅延したぶん使用メモリが増えていくというだけです。

前々回の検証でせっかくObjectAllocのスクリーンショットを撮ったのでメモ程度に貼りつけておこうと思います。


各矢印は、それぞれ前々回の検証で

  • ループ内で確保したオブジェクトに全てreleaseを適用した場合の使用メモリがMAXになった部分
  • ループ内で確保したオブジェクトに全てautoreleaseを適用した場合の使用メモリがMAXになった部分
  • ループ内で確保したオブジェクトにautoreleaseを適用するが、NSAutoreleasePoolを使って定期的に解放した場合で使用メモリがMAXになった部分

を示します。

f:id:tokorom:20100404183411p:image

このグラフは、確保するメモリ容量やNSAutoreleasePoolの解放の頻度によって全く変わってきますので、あくまでもイメージとして。

見てのとおり、autoreleaseで多くのオブジェクトの解放を遅延させればさせるほど使用メモリが膨大になっていきますので、

  • 何回も繰り返されるループの中で、ローカル変数に対してautoreleaseを使うことは避ける
  • autoreleaseを使ったコードを何度もループせざるを得ない場合には、NSAutoreleasePoolで適切な頻度で解放する

といったことに気をつけないと。。。というのを改めて感じた次第です。


※最後に、くどいかもしれませんが、

  • クラス変数のコンテナにaddしたあとのオブジェクト
  • Viewにaddしたあとのコントロール

など、releaseでもautoreleaseでもどっちみちそのオブジェクトが保持されたままの(参照カウンタが0にならない)ケースでは、autoreleaseに対するデメリットは見当たらないので積極的な利用をオススメします。

2010-02-20

NSStringのlengthについてのメモ書き

| 09:43 | はてなブックマーク -  NSStringのlengthについてのメモ書き - iPhoneアプリ開発まっしぐら★

文字エンコーディングによって結果が変わることを確認。

ちなみにソースコードはUTF-8で書いている。

NSString* defaultString = @"あいうえお";
NSString* utf8String = [NSString stringWithCString:"あいうえお" encoding:NSUTF8StringEncoding];
NSString* asciiString = [NSString stringWithCString:"あいうえお" encoding:NSASCIIStringEncoding];
NSLog( @"default: %d", defaultString.length );
NSLog( @"utf8String: %d", utf8String.length );
NSLog( @"asciiString: %d", asciiString.length );

■実行結果

default: 5
utf8String: 5
asciiString: 15

2009-08-29

iPhoneとiPod Touchのスペック

| 17:15 | はてなブックマーク -  iPhoneとiPod Touchのスペック - iPhoneアプリ開発まっしぐら★

* iPod touch 1G / CPU:400MHz , RAM:128MB

* iPod touch 2G / CPU:533MHz , RAM:128MB

* iPhone 3G / CPU:412MHz , RAM:128MB

* iPhone 3G S / CPU:600MHz , RAM:256MB

2009-08-22

ステータスバー/ナビゲーションバーを半透明にする方法 OS 3.0 推奨版

| 14:40 | はてなブックマーク - ステータスバー/ナビゲーションバーを半透明にする方法  OS 3.0 推奨版 - iPhoneアプリ開発まっしぐら★

ステータスバー/ナビゲーションバー/ツールバーを半透明にする場合、それぞれのbarStyleプロパティにUIBarStyleBlackTranslucentを指定すると、各所で記載されている。

私も真似してそれを設定してみたところ、OS 3.0 からは、この定数がDeprecated(利用非推奨)になっている模様。

ということで、3.0以降でナビゲーションバーを半透明にする際の推奨されるコードの備忘録です。

  //  こちらのコードは OS 3.0以降は非推奨
  //  self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
  //  self.navigationController.toolbar.barStyle = UIBarStyleBlackTranslucent;

  // ナビゲーションバーを半透明に(selfはUIViewController)
  self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
  self.navigationController.navigationBar.translucent = YES;
  // ツールバーを半透明に(selfはUIViewController)
  self.navigationController.toolbar.barStyle = UIBarStyleBlack;
  self.navigationController.toolbar.translucent = YES;

  // ちなみにステータスバーは、これまでどおりでOK
  [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;

このコードの実行結果は以下のとおり。

f:id:tokorom:20090827150936p:image