Clang Static AnalyzerでiPhoneプログラムソースの静的チェック


ちょっと前に作ってたiPhoneプログラムがよく落ちるってことで
リーク潰しをがしがしと
iPhoneいじり始めの時にわわわーっと書いたコードなので
結構メモリ管理を勘違いしたままやってたんだなーと反省
ちょっとググってたら
Clang Static Analyzerというツールを知りました。
実行しながらチェックするInstrumentsのタイプではなく
ビルド時にメモリ管理や変数のチェックなどおこなうものでして
これがまたナイス過ぎるのです。むしろ必須にしたい勢いで・

インストールは特に難しいものじゃなく
/usr/local/bin/へclangフォルダごと突っ込んでパス通しておきます
あとは
ターミナルで当該プロジェクトのディレクトリへ移動して

scan-build --view xcodebuild
(viewの前はハイフン×2)
するとブラウザ立ち上がって結果を表示してくれます。
ご丁寧に他者へのバグ報告画面もあったり

追記
ただ、2回目以降ちゃんとチェックを終えないこともあり
クリーニングしても変わらずなら、Buildフォルダを削除してから実行するとイケるぽい

XCodeのスクリプトで一発起動できたらいいなーだれか作ってくれないかなー
(ちょっと試してみたけどよくわからんかった。)

こちらのサイトを参考にさせていただきましたー。
てなわけでまたリーク潰し。。。

http://kirika.la.coocan.jp/acts/cocoastudy/200807/clang-static-analyzer.html
http://son-son.sakura.ne.jp/programming/iphone_sdk_iphone_sdk.html


iPhoneのカスタムスライダーの作り方


ただいま2件同時進行でiPhoneアプリ製作中
1件は個人的なものですけど。
その中で、スライダー使いたいけど、デフォルトのUISliderは使いたくない。
独自のUIのスライダーは音楽系アプリではよく見るけど、どやってやってんのかな〜?と疑問だったので
あんま日本語の情報も無いのでちょっと作ってみました。

sliderimage.png

//枠画像(14×50)の取得
UIImage *minImage = [UIImage imageNamed:@"slider_L.png"];
UIImage *maxImage = [UIImage imageNamed:@"slider_R.png"];

//ツマミ画像(50×50 余白を左右に10px加えたもの)
UIImage *tumbImage= [UIImage imageNamed:@"tumb2.png"];

//左右枠画像の伸張設定
minImage=[minImage stretchableImageWithLeftCapWidth:13.0 topCapHeight:0.0];
maxImage=[maxImage stretchableImageWithLeftCapWidth:1.0 topCapHeight:0.0];

//スライダーインスタンス生成
customSlider = [[UISlider alloc] initWithFrame:CGRectMake(30, 100, 200, 50)];

//枠画像をスライダーへ登録(登録した時点で、スライダーのviewのwidthに合うように枠画像が伸張する模様)
[customSlider setMinimumTrackImage:minImage forState:UIControlStateNormal];
[customSlider setMaximumTrackImage:maxImage forState:UIControlStateNormal];

//ツマミ画像をスライダーへ登録
[customSlider setThumbImage:tumbImage forState:UIControlStateNormal];

//各種値設定
customSlider.minimumValue = 0.0;
customSlider.maximumValue = 100.0;
customSlider.continuous = YES;

//スライダー初期値
customSlider.value = 50.0;

//アクション
[customSlider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];

//スライダーをviewへ登録
[self.view addSubview:customSlider];

キモはこの2つの引数の設定で、Widthの解釈がイマイチわからん。。
minImage=[minImage stretchableImageWithLeftCapWidth:13.0 topCapHeight:0.0];
maxImage=[maxImage stretchableImageWithLeftCapWidth:1.0 topCapHeight:0.0];

一応できてはいるんだけど、なんだかよくわからんので気持ちワルいったらない。

画像入りのプロジェクト置いておきます。
slider test project