Home > 未分類

未分類 Archive

Ajaxがわからない

jQueryってリソースリークしませんか?

Ajaxをいじりはじめて4時間ほど経過したけれど、よくわからない。どうもリソースリークするような気がする。例えば「jQueryでCSVをテーブル表示」というページがあるが、サンプルの「Load CSV」というボタンを連打してから、SafariのWebインスペクタを見ると次のようなことが起こっている。

e38394e382afe38381e383a3-2

test.txtがいっぱい

この「Load CSV」ボタンを押すとtest.txtを開いて表を作成する。そこまではいいのだけど、押した回数の数だけtest.txtを開いて閉じない。これはまずい。

最初に馬鹿なことをしていて、1回クリックすると倍々で呼ばれるバグを作ってしまって気づいたのだけど、すぐに2のn乗で増えていくのでブラウザが応答しなくなってしまう。それで気がついた。

今のところ解決策が見つかっていないのだけど、jQueryでload()は一回しかしてはいけないような気がする。したがって、Google Financeのようにリアルタイムで刻々と変わっていくものをload()で読んではいけないのだろうか。

だとすると、どうやって解決したらいいのだろう?そういうコーディングは禁止というならそれでもいいのだけど、ボタンを何度も押すとリソースリークするのはまずいんじゃないかな。

誰か解決策をご存じでしたら教えて下さいm(__)m

追記

他にも「jQuery 開発者向けメモ – 基本・サンプル」のload()に関するところもボタンを連打するとやはりリソースリークしている。

自分はついさっき初めていじり始めたので使い方を誤っている可能性は高いのだけど、こうも上級者っぽい人のページでもこのような問題が起きるとすると、本質的にjQueryとかAjaxはリソースリークと浅からぬ縁があると言うことなのだろうか。

Safariがダメぽという可能性もあるけど。FireBugでも見てみようか。

The Debugger has exited due to signal 5 (SIGTRAP).

ずっと困っている問題がある。LeopardのXcode 3.0で開発をしていると最初はいいのだが、すぐに

2008-04-26 17:42:29.343 Xcode[246:203] *** NSTask: Task create for path ‘/Users/私/Desktop/Cocoa SQLite Browser/build/Debug/Cocoa SQLite Browser.app’ failed: 13, “Permission denied”. Terminating temporary process.

The Debugger has exited due to signal 5 (SIGTRAP).The Debugger has exited due to signal 5 (SIGTRAP).

となって止まってしまう問題がある。やはりちゃんとマニュアル類に目を通した方がいいのか。

さて、定番のGoogle検索で何とかしようと思うのだけど、例えば“has exited due to signal 5″をキーに探しても結果は324件しかなく、色々読んでも悩んでいる人はいることは分かるけど、効果的な解答が示されているものは見つからなかった。“NSTask: Task create for” “Permission denied”で探すとさらに結果は少なく78件しかない。

これはなんとかならないのか。とりあえず、Terminalで「バンドル/Contents/MacOS/バイナリ」を直接起動すると起動はするのでテストは可能。しかしFinderのアイコンには禁止マーク(?)がついているし、ダブルクリックしても「このアーキテクチャでは使用できないため、開くことができません」と言われる。これでは配布できないよ。。。

Document-based Applicationで起動時に自動的に新規書類を作らない方法

Cocoa Document-based Applicationのプロジェクトを作って「ビルドして進行」を押すとウィンドウが現れる。これはMyDocument(クラスとnib)のためのウィンドウである。最近のアプリケーションは起動するとウィンドウを自動的に開くものが多い(テキストエディタとか)けれど、そうでない方がいいものもある(例えば画像ビューア)。さて、どうすればいいのだろう?

ポイントを先に書いてしまうと

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender {
return NO;
}

をdelegateしてしまればOKである。

しかし、Interface Builder 3.0ではインターフェースがずいぶん変わっていてやり方がわからないので試行錯誤してみた。IB 2.0までならIBでNSObjectのサブクラスを作ってインスタンス化してファイルとして書き出してコードを編集する。IB 3.0ではどうするのだろう?

どうもIB 3.0では先にXcodeでクラスを作る必要があるようだ。まずXcodeのファイルメニューから「新規ファイル」を選び「Cocoa→Objective-C class」を選ぶ。とりあえず名前は「ApplicationController」とでもしておく。ApplicationController.mには上記のapplicationShouldOpenUntitledFileメソッドを書いておく。

新規Objective-Cクラス

次にIBでMainMenu.nib(メインのnibファイル)を開いて、パレットからNSObjectをドラッグする。

Interface Builder 3.0ライブラリ

適当な名前(SQLiteDBController)をつけてInspectorからIdentity Inspectorを開いてClassに先ほど作ったクラス名「ApplicationController」を指定する。

Interface Builder 3.0インスペクタ

最後にFile’s Ownerから線を伸ばしてさきほど作ったクラス(SQLiteDBController)に接続し、delegateとして指定する。

Interface Builder 3.0でdelegate設定

以上で自動的に新しいファイルを作成しなくなる。

Home > 未分類

Search
Feeds
Meta

Page Top