Cocoa

Blocksで不動点関数(Re: リークしない再帰blocksの書き方)

お題: Sometimes, you want a block to be able to call itself. That means it needs a reference to itself. And that means you have a wonderful opportunity to create a strong reference cycle that will endure till the end of time, or at least t…

Re: nil に対するメッセージ送信が例外にならない

お題: ・nil に対するメッセージ送信が例外にならないこの仕様って、Objective-C以外でほとんど見かけたことがないのだけど、メリットに比べてデメリットが大き過ぎると思う。オブジェクトのメソッドチェインでこの仕様がたまに便利なことはあるけど、ほとん…

Blocksをメソッドとして追加する

imp_implementationWithBlock()という、BlockからIMPを作り出す関数がiOS 4.3 or Lionから使えるようになったみたいなので、これを使って実行時にインスタンスメソッドを追加する実験例えば、モーダルウィンドウをクローズした時に自動的にstopModalするコー…

アプリケーションが使用しているデフォルトキーを調べる

一般的なCocoaアプリケーションでは、各アプリケーションのメニューの「環境設定」で設定した値は、ユーザーデフォルトデータベースに格納され、次回起動時にはその値を読み込んで使用することで、アプリケーションの挙動をユーザ毎に変更できるようにしてい…

mp3ファイルからID3タグを読み込むサンプル

今度はAVFoundation Frameworkを使ってみた。 試したOSバージョンは10.7.2(Lion) #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> #import "AVMetadataItemAdditions.h" int main (int argc, const char * argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSURL </avfoundation/avfoundation.h></foundation/foundation.h>…

真の3D迷路

前回やってみた、「CALayerのみで3Dっぽい表示にする」というのを使って、折角だし立体迷路アプリを作ってみた。 実行ファイル(dmg) ソースコード ちなみにOSバージョンはSnow Leopard(10.6.6)です。 説明 3D迷路って普通こういうのをイメージすると思う。 …

CALayerで3Dグラフィックス?

ちょっと3Dグラフィックスやってみようかと思って、もしかしたら座標変換のライブラリはないかとドキュメントを見ていたら、Core Animationの関数を使ってアフィン変換・透視変換とかできる上に、そのまま描画もできるらしいということが分かった。 Core Ani…

Re: Objective-C で AUTOLOAD (あるいは method_missing )

お題: http://unknownplace.org/memo/2011/12/05/1/ リンク先の実装だと引数の値が取得出来ないので、以下の制約付きで引数が取れるようにしてみた。 戻り値は常にid型 引数は全てid型 引数にnilを指定されたときはNSNullに変換 #import <Foundation/Foundation.h> @interface Foo : N</foundation/foundation.h>…

奇跡の軌跡

AppKitのリハビリ代わりに、2011年8月ごろのコマ大でやってたらしい「奇跡の軌跡」って問題をやるよ。こういう問題だったらしい: 「■コマ大数学科:奇跡の軌跡: ガスコン研究所」より 問題:図のように3つの車輪が異なるサイズで、車輪Cは車輪Bに、車輪Bは車…

Re: NSString が整数値かどうか調べる関数

お題: 「NSString が整数値かどうか調べる関数 - 宇宙行きたい」とりあえずFoundation Frameworkにあるようなクラスを使って書いてみるよ。 但し仕事でObjective-C/Foundation使ってたのは前世紀なので今はもっと良いやり方あるかも。 あとiOSだったら正規表…

アプリ起動時に処理を割り込ませる方法

バージョンはLeopard*1。DYLD_FORCE_FLAT_NAMESPACEを使わないといけないのがアレですがまあアレです。 あと不要な手順が結構あるかも。 試すときは自己責任でお願いします。とりあえずsshとかでログインできるようにしておくと良いかも。 アプリがリンクし…

『TigerのCocoaにみるMVCの完成』のチュートリアルをやってみた(Leopardで)

Core Dataをそろそろ使ってみようかと思い、参考になりそうなサイトをぐぐったら、マイコミジャーナルの『【特集】TigerのCocoaにみるMVCの完成』という特集記事があった。『Dynamic Objective-C』や『Happy Macintosh Developing Time』の著者の木下誠さん…

ログインパネルに入力したパスワードを取得するプログラム

ローカルディスクあさってたら2000年ごろに作ったvm_read()を使って他のプロセスの中身を覗き見るライブラリが出て来たので、ログインパネルのアプリの中身を覗いてみた。 Mac OS X 10.4環境で動作します。といってもウチの環境以外で動くかどうか分からない…

入力したURLからソースを取得するサービス

お題: ブラウザを開かずに直接HTMLソースを見る方法 - 頭ん中テキストエディタの「開く」でファイル名を指定するところに そのまんま URL を入力したら そこにあるソースを読み込むことができるのだった。画像編集ソフトの「開く」で ウェブ上にある画像のUR…

大量のデータを扱う時のメモリ消費に注意する

データベースのリソースが非常に高価だったり、負荷分散が難しい場合なんかの場合は、アプリの方で検索結果をキャッシュしたりするわけだけど、レコード数が十万を超えてくるとかなりメモリを食ったりする。 データベースが使い放題の場合はあえて毎回データ…

コマンドラインツールで設定ファイルを使う方法

いろいろあると思うけど、実行ファイルと同じディレクトリ(またはその下のResourceディレクトリ)に.plistファイルが配置されるようにして、NSBundleの-pathForResource:ofType:で引っ張ってくるのが楽な気がする。 ファイル(Config.plist)の内容 { /* databa…

PostgreSQL用のデータアクセスクラスを作成

とりあえず単一テーブルをObjective-CベースでCRUDれるクラスを作った。ヘッダで書くとこんな感じ: @interface TableInfo : NSObject { } + (TableInfo *)tableInfoWithTableName:(NSString *)tableName primaryKeyNames:(NSSet *)primaryKeyNames; - (NSStr…

未実装のメソッドにマーキングする

TDDなんかする人向きの、とりあえず未実装のメソッドはエラーを返すようにして実装漏れを防ぐ秘訣。 - (id)hoge { // TODO: あとで実装する [self doesNotRecognizeSelector:_cmd]; return nil; }単純にreturn nil;するだけだと、うっかり動いて実装漏れして…

ユニットテストをカテゴリで書く

と良いかと思うのだがどうか。例えばHogeClassのテストを書くのに、HogeClass_UnitTest.[hm]を作って、 @interface HogeClass (UnitTest) + (void)testHogeHoge; + (void)testHogeHuga; @endみたいに書いておくと、どれのテストか分かりやすいし、Deployの時…

NSXML関係Tips

URLを指定してDOM documentを取得 NSString *urlString; // @"http://~”が入っている BOOL asHTML; // HTMLならYES NSURL *url = [NSURL URLWithString:urlString]; NSError *error = nil; int options = (asHTML) ? NSXMLDocumentTidyHTML : 0; NSXMLDocume…