Hatena::Groupiphone-dev

iOS プログラミングメモ

2010-03-30 (Tue)

[] iPhone SDK開発のレシピ 訂正情報2 20:12  iPhone SDK開発のレシピ 訂正情報2 - iOS プログラミングメモ を含むブックマーク

iPhone SDK開発のレシピ「レシピ016:ユニークなファイル名を生成する」に記載のコード内に、メモリリークする問題が含まれていました。

uniqueFileNameWithExtentionメソッドを次のように置き換えください。(ページ39)

+ (NSString *)uniqueFileNameWithExtention:(NSString*)ext
{
    CFUUIDRef uudiRef = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef uuidStr = CFUUIDCreateString(kCFAllocatorDefault, uudiRef);
    CFRelease(uudiRef);

    NSString *fileName = [NSString stringWithFormat:@"%@.%@",uuidStr,ext];
    // 解放処理を追加
    CFRelease(uuidStr);

    return fileName;
}

ご迷惑をお掛けして申し訳ありませんでした。ご指摘くださいました @griffin_stewie さま、ありがとうございました。

なお、最新のサポート情報は秀和システムのウェブサイトにありますのであわせてご参照ください。

なまけものなまけもの2010/04/02 10:03良さげだったので購入したんですが、
サンプルのダウンロードはないんでしょうかね?
ちょっと確認したいだけで手打ちは面倒です。。。
画像のコードなのに結果の写真がなかったり。。。

ktakayamaktakayama2010/04/02 23:38購入どうもありがとうございます。
サンプルコードはありません。
サンプルコードがあると、コピペで終わっちゃうだけだと思ったので、考えていませんでした。

購入者購入者2010/04/04 11:59私も買いましたが、サンプルコードがないのは不便です。
プロジェクトになっていなくてもいいので、ダウンロードできるようにしてほしいです。
正誤表よりも動作するコードがあればいいです。

コピペで終わると書籍の意図に反するんですか?
書籍の「はじめに」には「すぐに使える、使いたくなるような珠玉の〜」と書いてあります。
昨今のPG系書籍でサンプルダウンロードは当然だと思っていたので、
「すぐに使える」はそういう意味だと思ってました。

ktakayamaktakayama2010/04/05 12:52ご意見ありがとうございます。
検討します。

ktakayamaktakayama2010/04/13 12:54大変遅くなってしまいましたが、配布する方向で準備中ですので、恐れ入りますがもう少々お待ち下さい。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20100330

2010-03-28 (Sun)

[] iPhone SDK開発のレシピ 訂正情報1 19:28  iPhone SDK開発のレシピ 訂正情報1 - iOS プログラミングメモ を含むブックマーク

iPhone SDK開発のレシピ「レシピ025:文字列からMD5を取得する」に記載のコード内に、OS3.x以降での非推奨メソッドが含まれていました。

NSString#stringWithCString:length: メソッドは非推奨となったため、次のように置き換えください。(ページ53)

- (NSString *) MD5String {
    const char *cStr = [self UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cStr, strlen(cStr), digest);

    char md5string[CC_MD5_DIGEST_LENGTH*2];

    int i;
    for(i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        sprintf(md5string+i*2, "%02X", digest[i]);
    }

    return [NSString stringWithCString:md5string encoding:NSASCIIStringEncoding];
    // return [NSString stringWithCString:md5string length:CC_MD5_DIGEST_LENGTH*2];
}

ご迷惑をお掛けして申し訳ありませんでした。ご指摘くださいました @uenno さま、ありがとうございました。

なお、最新のサポート情報は秀和システムのウェブサイトにありますのであわせてご参照ください。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20100328

2010-03-24 (Wed)

autorelease は遅いか速いか 16:03  autorelease は遅いか速いか - iOS プログラミングメモ を含むブックマーク

以下を見て、ちょっと気になったので自分でも検証してみた。

autorelease の方は、開放してないから速いんじゃないかなあと思ったので、以下のように。

#import <Foundation/Foundation.h>

// Inteface
@interface Man : NSObject
{
   @private
      NSUInteger age_;
}
@property (nonatomic, assign) NSUInteger age;
@end

// Implementation
@implementation Man
@synthesize age = age_;
@end
void test_release() {
   NSDate* start = [NSDate date];

   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   for ( int i = 0; i < 100; ++i ){
      for ( int l = 0; l < 1000; ++l ){
         Man* hoge = [[Man alloc] init];
         hoge.age = l * i;
         [hoge release];
      }
   }
   [pool drain];

   NSLog( @"%f", [start timeIntervalSinceNow] * -1 );
}

void test_autorelease() {
   NSDate* start = [NSDate date];

   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   for ( int i = 0; i < 100; ++i ){
      for ( int l = 0; l < 1000; ++l ){
         Man* hoge = [[[Man alloc] init] autorelease];
         hoge.age = l * i;
      }
   }
   [pool drain];

   NSLog( @"%f", [start timeIntervalSinceNow] * -1 );
}

int main (int argc, const char * argv[]) {

   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

   test_release();
   test_autorelease();

   [pool drain];
   return 0;
}

結果。

releaseautorelease
1回目0.0427110.068670
2回目0.0419540.066905
3回目0.0403510.066315

AutoreleasePool を作らなかった場合は tokorom さんの所と同じように autorelease の方が速い。

releaseautorelease
1回目0.0405390.034647
2回目0.0415910.034622
3回目0.0400150.034726

autorelease の開放タイミングって、メインなスレッドの処理が終わった後?でしたっけ。この結果を見る感じ、autorelease を多用してると、開放の瞬間に負荷が集中しちゃうような気がするんですけど、どうなんでしょうか。詳しい人。

tokoromtokorom2010/03/24 18:14おー、有用な実測が増えてきますねー^^
ぼくもAutoreleasePoolを含めて実測してそちらのほうが遅くなっているのを確認しました。
AutoreleasePoolでreleaseを発動する頻度をあげると極端に遅くなるので、今のところAutoreleasePoolの作成と解放に時間がかかっているように思えます。
ここからはまだ未計測なのですが、都度releaseよりも、まとめてrelease(autorelease)のほうが、解放処理自体にかかる時間は短くなるような気がします。そういった意味で、autoreleaseが遅くなるのは、paellaさんからコメントいただいた「オブジェクトが大量にプールされているときに、イベントごとに数え上げの対象になってしまい、数え上げの処理が遅くなってしまう」の部分くらいしか思い当たらないのが現状です。そのあたり、突っ込んで調査してみたいなと思ってます。

ktakayamaktakayama2010/03/24 19:05僕もたっぷり突っ込まれましたw
なんだか難しくなってきたので、皆さんの活躍に期待します

tokoromtokorom2010/03/24 20:21たしかに予想以上に深く突っ込んでいけそうで楽しみです!こうやってブログで連携して調査していけるのはいいですねー^^
ひとまず元記事のほうに、都度releaseとまとめてreleaseの実測結果だけ追記させていただきましたー。

khirohiskhirohis2010/03/24 23:58autorelease が遅いって話自体が初耳だったのですがその差は NSAutoreleasePool による retain となんらかのデータ構造を使ったオブジェクト管理のコスト分だけだと思いますよ

khirohiskhirohis2010/03/25 00:14あー、確認したら retain はしないようですね。お詫びと訂正&連投すいません

2010-03-22 (Mon)

cocoa.vim 続き 15:13  cocoa.vim 続き - iOS プログラミングメモ を含むブックマーク

昨日 cocoa.vim の「ビルドと実行」が動くようになった わけですが、なにやら調子がおかしい。どうもビルドするSDKが間違ってるようで、シミュレータでやってるつもりが実機用にビルドを実行してるような気が…。

Emacs で iPhone アプリ開発を快適にするための設定 : 紹介マニア を見ていたら、BuildAndRun についてコマンドが記述されていたので、それを使って、まあその、まんま使って書き直しました。

fun s:BuildAnd(command)
    call system("open -a Xcode ".b:cocoa_proj." && osascript -e '"
                \ ."tell application \"Xcode\" to activate \r"
                \ ."tell application \"System Events\" \r"
                \ ."     tell process \"Xcode\" \r"
                \ ."          key code 36 using {command down} \r"
                \ ."    end tell \r"
                \ ."end tell'")
endf

「ビルドと実行」コマンド専用になっちゃったけど、ま、とりあえずいいか。command でうまく分岐出来るようになったら、フィードバックしないと。

2010-03-21 (Sun)

cocoa.vim 14:52  cocoa.vim - iOS プログラミングメモ を含むブックマーク

XCode のエディタは使わないで vim で開発してるという vim 大好きっ娘なら欠かせない cocoa.vim という大変素晴らしいプラグインがあるんですけど、d-r で「ビルドと実行」が行なわれるはずが、うまく動作せずビルドしかしてくれない。まあいいやとしばらく放っておきましたが、やっぱり何かおかしいと思って調べてみたら、すぐ解決出来ました。

単にこれだけ。適当にやってみたら動いただけで、本当に正しいのかはわかんないんですが。この辺なにやってるかさっぱりわからないんで、こんなベタ文字列の処理じゃなくてうまく正常終了か判定するやり方があればそうしたいんですが、なんとかならんもんか。

--- objc_cocoa_mappings.old.vim 2010-03-21 14:46:25.000000000 +0900
+++ objc_cocoa_mappings.vim     2010-03-21 14:46:11.000000000 +0900
@@ -65,7 +65,7 @@
                                \ ."\"Xcode\"' -e '"
                                \ .'set target_ to project of active project document '
                                \ ."' -e '"
-                               \ .'if (build target_) starts with "Build succeeded" then '
+                               \ .'if (build target_) starts with "ビルドは問題なく完了しました" then '
                                \ .a:command.' target_'
                                \ ."' -e 'end tell'")
 endf
トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20100321

2010-03-18 (Thu)

iPhoneSDK開発のレシピって本が出ますよー 17:10  iPhoneSDK開発のレシピって本が出ますよー - iOS プログラミングメモ を含むブックマーク

iPhoneSDK開発のレシピ

iPhoneSDK開発のレシピ

@syuhari@hirobe@takayama の三人で共著しました。サンプルコードだらけの本です。

目次がすごい!かも?! → iPhone SDK開発のレシピ ――113個のレシピで学ぶiPhoneアプリ開発の極意 - 秀和システム あなたの学びをサポート

簡単に言うと、「NSArrayのシャッフル」みたいなネタや no title みたいなコードが100個くらい書いてあるっていう感じでしょうか。細かいコードの説明はあまりなかったりするので、ある程度わかってないと読むのはつらいと思われます。

よろしくおねがいします!

こだわりポイント1

なにげに大きさにこだわりがあって、今出てる開発本ってB5サイズばっかりじゃないですか。入門Trac とかと同じA5版にしましたので、気軽に持ち運べちゃったりするかなーなんて。

こだわりポイント2

開発本ってなんだかやたらとお高いですよねえ。ということで安めを狙いました。何気に一番安く出来たんじゃないかなあと思いますけど、実際どうなんでしょうね。アマゾンで結構チェックしました。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20100318

2010-03-17 (Wed)

横浜で iPhone アプリ開発の勉強会第四回をやりました 11:51  横浜で iPhone アプリ開発の勉強会第四回をやりました - iOS プログラミングメモ を含むブックマーク

なんか最近は勉強会日記ばかりですが、実は他の仕事に忙殺されていてほとんど新しい事が出来ていません。

唯一勉強会だけが勉強の時間になってしまっていて、iPad がもうすぐ発売されるというのにほんとマズい状況ですね。

そろそろ落ち着いてきたので、iPhone 関連の方に忙殺される日々にシフトしていきたいです。

さて、西東京の勉強会に参加したその一週間後、第四回目となる横浜勉強会が開催されたので行ってきました。今回はなんと27名もの人が集まりました。いやー、なんだか良く分かりませんが、すごい期待の高さでビックリです。

豪華ラインナップはこんな感じ。

  • OpenCV を使ったアプリの発表
  • 「OpenCV頑張ってみます」の予告 @GLTime
  • CodingGuideLinesForCocoa復習 @tmokita
  • cocos2d を導入してみる @syuhari
  • UIWebView 周りの裏技とか @k_katsumi
  • cocoahttpserverについて紹介 @theodoorjp
  • CVと画像処理の基礎の基礎 @sonson_twit
  • 質問コーナー

勉強会の様子はトゥギャッターにまとめてあります。

発表資料は、一部ですが SlideShare に上がっています。

しかしまあ何ていうかその、適当にノリで始まった横浜勉強会ですが、毎回こんな真面目に凄いためになる情報のやり取りが出来るのも発表してくださる神様と参加者のみなさんのおかげです。ありがとうございます。だんだん適当では済まされなくなってきたプレッシャーをヒシヒシと感じてまして、まだ続けていきたいので、主催者としてはまあなんとかもうちょっとボチボチ頑張っていきます。

横浜 iPhone 開発勉強会は、グーグルグループ(yidev) で開催情報をやりとりしています。興味のある方は、登録してみてください。

懇親会で、UIKit本で有名な @tokorom さんに人生初サインを求められてしまいました。そして名前を書き間違えてしまいました。死ぬほど恥ずかしいです。拙著「入門Trac」でした。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20100317

2010-03-07 (Sun)

西東京iPhoneDev.勉強会 第一回 23:57  西東京iPhoneDev.勉強会 第一回 - iOS プログラミングメモ を含むブックマーク

横浜勉強会に来てくださってる @tmokita さんが、自身のホームである西東京近辺の方を集めて勉強会を開催するという事で、横浜から参加してきました。

また今回の勉強会もすげー勉強になりました。twitter のハッシュタグ wtidev でつらつらつぶやいてたので、興味がある方はこちらを参考に。というか、きっと誰かがまとめてくれます。今まで filteredArrayUsingPredicate を知らなかったのはものすごい損失だなー。このメソッドは、また改めて使い方を探りたい。

そして何といっても、@hkato193 さんが iMac 持参でやってきたという衝撃が。遠いところお疲れ様でした。お話できて良かったです。

いやー、しかし参加費は安いし、主催者の気遣いははんぱないし、素晴らしい集まりになっていました。横浜でも勉強会をやっていますけど、こちらはマイペースで今まで通りでグダグダやるから比較しないでね(笑

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20100307