Cocoaはさっぱり!!! version.8at MAC
Cocoaはさっぱり!!! version.8 - 暇つぶし2ch550:名称未設定
07/11/04 09:00:12 EtU+Y3fk0
>>548
あなたが立てたスレッドAの中で mydl を生成したのなら、
そのスレッドAに対して delegate のメッセージが送られますよ、と。

だから、メインスレッドで delegate メソッドを受け取ろうとしてもダメ。

勉強し始めで NSThread と格闘する必要はあまりないような気がします。
やりたかったことは、NSThread で別スレッド立てなくても十分
出来ると思います。NSTimer で一定間隔で NSURLDownload を作って
やればいいと思う。

551:名称未設定
07/11/04 09:08:28 mdbrqZtH0
>>549
甘い。渡された array が arrayA とたまたま同じだった場合に
retain count が増えてしまって開放されなくなる。

まあ static object 一個ぐらいいい気もしますが。

552:540
07/11/04 09:09:37 hK/+lBWK0
>>541-543
ご指摘ありがとうございました。
release や retain に全く気を配ってなかったので、
そのへんを勉強し直したいと思います。

コーディングスタイルについても、アップルのドキュメントが
あったので、参考にしたいと思います。

また何かありましたらよろしくお願いします。

553:名称未設定
07/11/04 09:35:10 mdbrqZtH0
まあ Leopard で ガーベジコレクタがついたので、
retain/release はあんまり気にしなくてもいいんではないかと思うけど。

554:名称未設定
07/11/04 09:47:24 HL69eV8Y0
「あんまり気にしない」んじゃなくて、gc使うなら自分で参照カウントを「管理しない」のが正解じゃないの。gcとretain/releaseって共存できるの?

555:名称未設定
07/11/04 09:52:10 0qI6n8f/0
>>550
丁寧な説明ありがとうございます。
ご指摘の通り、スレッドはこっちへ置いておいて、NSTimerを調べてみます。


556:名称未設定
07/11/04 10:03:53 mdbrqZtH0
>>554
「あまり」気にしない、というのはたんに婉曲語法で使っただけでした、失礼

それとはべつに、retain/release と gc はある意味共存できるらしいですよ。
たとえば、retain/release つかって書いたライブラリを gc つかったプログラムから呼び出すとか。その場合は gc が retain/relase を乗っ取ってそっちが管理してしまうらしいですが。

557:名称未設定
07/11/04 10:38:34 0qI6n8f/0
NSTimerを使って、無事に思った事が出来ました。
ありがとうございました。


558:名称未設定
07/11/04 14:41:54 LrVqL1O30
>>554
ぱっとドキュメント流しただけでまだ勉強中なんだが、GCにするとRelease/Retain
で書いたコードは既出の通りRelease/Retainが無視されるようになる。ただし
-deallocも呼び出されなくなるようなので、dealloc内で解放以外の処理(ノー
ティフィケーションの登録削除とか)してると修正いるんじゃない?

559:名称未設定
07/11/04 15:22:32 AqAwLsu+0
Objective-C ランタイム内でガベージコレクタの書き込み禁止割り当てプリミティブを使用するようにコードをコンパイルします。
コードには、GC 対応であることを示すマークが付きます。GC 対応のマークが付いたアプリケーションは、ランタイムからガベージコレクションを有効にして起動されます。
このアプリケーションでリンクまたは読み込まれるすべての Objective-C コードも GC 対応でなければなりません。GC“必須”としてコンパイルされたコードは、
従来の Cocoa retain/release メソッドを使用しないものと見なされるため、ガベージコレクションを有効にして実行していないアプリケーションには読み込めません。
GC“サポートあり”としてコンパイルされたコードは、従来の retain/release メソッドのロジックも含まれていると見なされるので、どのアプリケーションにも読み込めます。
ガベージコレクションは、Mac OS X 10.5 以降でのみサポートされます。[GCC_ENABLE_OBJC_GC, -fobjc-gc | -fobjc-gc-only]

560:名称未設定
07/11/04 19:01:40 m+9mmSo10
>>528

どなたか、これ分かりませんか。

561:名称未設定
07/11/04 19:31:56 F4mUKxhG0
>>560
ググると参考になりそうなソースが見つかるよ。

562:名称未設定
07/11/04 21:27:53 m+9mmSo10
>>561
ググっても、ゲイツに聞いても見つけられませんでした。
教えていただけないでしょうか。

スポットライトで更新されたファイルをみてもそれらしいのは、見つけられませんでした。

563:名称未設定
07/11/04 21:56:20 eMpGE3Ul0
質問です。
IB で作った GUI のボタンのクリックによって呼び出される
メソッドは、IB でアクションとして登録したメソッドでなければ
いけないのでしょうか。

GUI のボタンクリックから直接クラスメソッドなどを呼び出せれば、
便利だと思うのですが...

よろしくお願いします。

564:名称未設定
07/11/04 21:57:36 g1odPZrS0
>>560
リファレンスのListing 2見る限りそのメソッドは、チェックボックスの表示と
チェック結果の取得ができるだけで、チェック結果は自分でuser defaultsなどに
保存する必要があるように読めます。
その保存結果を消せばよいのではないでしょうか。

565:名称未設定
07/11/04 22:11:04 7bDqXoXS0
なんでこんなところにVB厨が?

566:名称未設定
07/11/04 23:07:40 hkBkZacr0
>>563
便利感がわかりません。

567:名称未設定
07/11/04 23:16:31 +MPnTuBD0
>>563
Visual Studioでオナニーしてきてください。

568:名称未設定
07/11/04 23:21:01 m+9mmSo10
>>564
ありがとうございます。
小さいプロジェクトでやってみましたら、たしかに保存されません。

しかし、保存されている(と言うかチェック後アラートが出なくなった)プロジェクトもあります。
ユーザデフォルトは使っていますが、自分で保存はしてません...、何か別の要因ですかね。

569:名称未設定
07/11/05 00:03:37 cWmVqLLf0
>>563
引数はどうするんだい?

570:563
07/11/05 00:44:49 vL57EKa+0
自分はVisualStudio など使った事がないので、どうして
そのように言われるのか全く分からないのですが...

たとえば、ボタンをクリックすると引数のいらないシンプルな
メソッドhogeを実行させたい場合、ボタンから受け付ける
IBAction のメソッドは、単にhogeにメッセージを投げるという
メソッドを実装するということになります。そうであれば、ワンクッション
おかずに直接一般的なメソッドをボタンから呼べれば便利かと
思ったのですが。

>>566 の便利感が分からないというのは、このようなことで面倒
臭がってる感覚がおかしいということでしょうか?

>>567のレスは、このような考え方が Cocoa の考え方から逸脱
しているという意味ですか?

571:名称未設定
07/11/05 00:53:26 cxjLp4Oj0
>>570
>>>567のレスは、このような考え方が Cocoa の考え方から逸脱
>しているという意味ですか?
MVCの考え方からするとあまりよろしくないんじゃないかな

572:名称未設定
07/11/05 01:17:22 eRl6Ul/x0
>>570
それができたとしても、結局ボタンが押されたときに
どのクラスの
どのクラスメソッドを
動かすか指定しないといけないよね、
それと、アクションをctrl-クリックでつなぐのと
面倒くささは似たり寄ったりだとおもうんだけど?

573:名称未設定
07/11/05 02:46:33 Jwl3DmWu0
>>570
わざわざ引数無しのメソッドに投げる意味が分かりません。
引数を無視するほうがシンプルでしょうが。

574:名称未設定
07/11/05 03:23:50 eRl6Ul/x0
<チラシの裏>
ああ、573 のレスでやっと意味がわかった。
570 は
-(void) hoge
{
いろいろ
}
-(IBAction) action:(id)sender
{
[self hoge];
}
というのが面倒ということで、573 は単に
-(IBAction) action:(id)sender
{
いろいろ
}
と書いてしまえばいいといってるわけね。
</チラシの裏>

575:名称未設定
07/11/05 08:01:47 hf81cxz/0
○○ができた方が便利、なんて言い出したらキリないよ

だから、最低限アクションの発生もとがわかる様に
senderを引数とするメソッドを呼ぶ様にしているだけ



576:名称未設定
07/11/05 09:55:21 8hT6idG50

送り元を特定する処理を書かなくてすむので楽。

 senderがViewの場合、Viewに対して問い合わせが容易。
 senderがControllerの場合、Controllerに対して問い合わせが容易。

結局senderがある理由って、MVC/KVCを実装するのに便利っていう感じ?


577:名称未設定
07/11/05 17:00:38 IpQGnVb20
KVCは関係ないわな。
あと、.NETでもアクションに対してsender(とevent)は送られる。

578:名称未設定
07/11/05 23:20:43 bq62hcmK0
ネットからデータをダウンロードするたぐいのアプリを作ろうとしてるのですが、
マシンがネットにつながっているかどうかを調べるには、どうすれば良いでしょうか。

579:名称未設定
07/11/06 00:01:37 dDZ7LoMrO
人間の貴方ならどうやって確認しますか?

ブラウザで繋いでみる
ピンで応答を見る
ルーターにグローバルアドレスが振られているか確認する



580:570
07/11/06 00:43:54 EfkD9Hx20
>>574
まさに、そう考えていたわけです。

確かに、MVCの観点ではあまりよくないという事で、納得しました。
レスしてくださった皆さん、ありがとうございました。

581:名称未設定
07/11/06 01:03:46 yXSDPyUU0
64ビットでコンパイルしたらメモリ使用量が2倍になったorz

582:名称未設定
07/11/06 01:06:25 82XP8MSU0
>>578
まずは本当に「ネットにつながっているかどうか」を調べる必要があるのか考えるべき

583:名称未設定
07/11/06 01:27:07 0tRgvZRF0
>>581
そりゃポインタが 64bit になるんだから、id だらけの Cocoa プログラムなら目盛使用量が2倍になるベ

そんなにすごい仕事してるの?GUI で64bit って余程のプロでないと使わない気がする ...

584:581
07/11/06 19:07:34 EYJtqLlN0
>>583
特に64ビットは必要ないんだけどソースコードの品質を上げるために試してみた
現時点ではバイナリサイズもメモリ消費量もでかくなるのでメリットはないかも
でもねアクティビティモニタに唯一64ビットと出るので、優越感は味わえる...人も...

585:名称未設定
07/11/07 23:34:09 simMyFDM0
CoreAnimation に関する和訳資料が、木下さんの
URLリンク(journal.mycom.co.jp)

これぐらいしかないんだねー。
CocoaBreak! さんとかががんばってるのに、アップルジャパンは
仕事しないねー。

586:名称未設定
07/11/08 00:30:07 QRMuL5KH0
CoreAnimationってWindows(.NET)のWPFよりショボクない?
というより、CoreAnimationの活用場所が限られ過ぎorz

587:名称未設定
07/11/08 00:41:08 oaqtntGw0
確かに、簡単だからといって乱用は禁物ですよね。
でも、テーブルの並び替えや移動とか、アニメーションすることに
よってユーザビリティが上がる事もあるから、使い方次第ですかね。

588:名称未設定
07/11/08 00:50:21 rO6zyLL/0
とりあえず [[view animator] setFrame: ...] とかでアニメーションになるのはいいことだとおもう

589:名称未設定
07/11/08 09:08:40 7GRUAd0i0
setFrameとかを使う機会がないかも...
タブを切り替えるときにいちいちウインドウサイズなんて変更しないし

それよりもiPod touchのような感覚的に解りやすくなるUIを期待していたのにな
スクロール移動に慣性を持たせたりね

590:名称未設定
07/11/08 17:24:26 zEdsiKUW0
ていうかアニメーションのあるUIってなんかイヤだ

591:名称未設定
07/11/08 17:33:37 mw5+Wv5j0
IB3.0のライブラリパネルが軽くフェードインアウトするような
ちょっとした効果は、まあ多少心地いいんだけど

設定でアニメ切れるようにして欲しいとも思ふ

592:名称未設定
07/11/08 20:59:50 8YBf9K2+0
インターフェイスがぐにゃりと曲がって笑ったw
パフォーマンスを気にするソフトでは使えないなぁ

593:名称未設定
07/11/08 21:24:26 InO3sJ7M0
NSFileManagerで例えば大量のbmpを移動させると、
メモリ使用量が増えまくるけど何故?

594:名称未設定
07/11/10 11:24:03 yoCzO0Lu0
バグじゃない?
というかCocoaのメモリリークはGCに頼るしかないかもorz

595:名称未設定
07/11/10 15:52:41 x13Isy6l0
何でもライブラリのバグのせいにする奴がいるが、大抵は自分のコードが原因。

596:名称未設定
07/11/10 16:32:44 5JNbGREU0
Core Data で、関連の設定がうまくいかず困っています。
コード内で NSMutableSet を setValue: forKey: でエンティティの
関連に設定してるのですが、一度セーブして再びそのファイルを開くと、
設定したはずの関連が無くなってしまっています。

関連は「一時」ではありません。
アプリは、document based では無い方です。
どの段階で関連が切れてしまっているのか、さっぱりです。

597:名称未設定
07/11/10 22:21:46 ns71lhvZ0
CoreAnimation を使うためには、どのヘッダファイルを
インクルードすればいいんですか?
Apple の CoreAnimationプログラミングガイドにも、記述が
ありませんでした。
とりあえずQuartzCore.flamework はプロジェクトに取り込みましたが
ダメでした。

598:名称未設定
07/11/10 22:29:06 jaO8AJbf0
ヒレガスの本に書いてあるNSTableViewのサンプルが動かないんだが、仕様でしょうか。
要素を追加してもテーブルに反映されないです。
参考までにXCode、2.5 tiger。

599:名称未設定
07/11/10 22:32:02 uoStVjcs0
>>597
つ /Developer/Examples/Quartz/Core Animation

600:名称未設定
07/11/11 12:09:17 /h9pnLX90
Cocoaで開発しているとつい構造体の存在を忘れてしまうけど、
データ構造を解りやすく表現する手段として重要だよね。
(KVCやDictionaryだと規模が大きくなると大変)
そんな時にpropertyの登場。うれしいけど下位互換性を保てなかったものか....


601:名称未設定
07/11/11 23:54:16 3xiFJV1b0
構造体使ってると、PPC/Intelで整合性がとれなくなるよ...

602:名称未設定
07/11/12 00:02:37 6pJx53410
CPUに依存するコードを書くから。

603:名称未設定
07/11/12 00:16:22 6YN+nfcu0
エンディアンですか

604:名称未設定
07/11/12 00:18:23 jJlBa7Hw0
べつに構造体つかってもいいんじゃない?ちゃんとディスク/ネットワークに書くときに気をつければ。

605:名称未設定
07/11/12 00:41:11 bRgWt6KB0
>>601
そろそろ答えをお願いします。

606:名称未設定
07/11/12 01:52:24 6qKNkZiA0
オブジェクト指向はどこへ消えた




607:名称未設定
07/11/12 06:44:56 t+THQgiE0
質問します。たとえばQuickSilverみたいに、どんなアプリが動いていても
起動してくれるショートカットキーの設定って、どうやるのでしょうか?
システム全体のキーボードイベントをフックして実装するのかと想像してるのですが
そういうイベントを受け取る方法を見つけられませんでした。

キーボードとかマウスとかフォーカスとかのシステムイベントをフックする
方法ってあるんでしょうか?


608:名称未設定
07/11/12 06:55:13 inGQ9CFd0
QuickSilverってのは知らんけど、自分のアプリが手前になくても、特定のキーイベントを受け付ける方法としては
Carbon EventにHotKeyというのがある。
RegisterEventHotKey、kEventHotKeyPressed、kEventHotKeyReleased辺りを使う。

609:名称未設定
07/11/12 07:02:27 t+THQgiE0
>>608
ありがとう。さっそく試してみます。


610:名称未設定
07/11/12 09:06:28 1OnUOF+c0
エンディアン変換はAppleが用意してるのでそれ使えばいいだけだ。
注意しなければならないのは浮動小数点を中間コードに変換することくらいだな。
ディスクに書き込むのなら、構造体ではなくてXML使うようにしてるけどな。

611:名称未設定
07/11/14 11:18:15 n4OM99880
Cocoaにはデフォで複数行表示で左揃えなタブコントロールはないのか・・・

612:名称未設定
07/11/14 11:19:38 6xRVuEo90
そんな気持ちの悪いUIはいらん。

613:名称未設定
07/11/14 11:58:54 n4OM99880
まあ複数行表示なんてどうでもいいが
Safariのタブはなぜ標準提供されないのだろうか

614:名称未設定
07/11/14 21:09:56 +yEMUk1e0
AppleアプリのUIは継ぎはぎだらけなので真似するのが大変orz
だからRIUIを難しくしているような気がするけどな

615:名称未設定
07/11/14 22:16:14 KqpvVDcT0
3になってカバーフローとか簡単に出来るんかいな。

616:名称未設定
07/11/14 22:35:49 XnqPDGec0
Windows の Office の環境設定一度でも使った事ある人なら、
複数行タブの馬鹿らしさが分かる

617:名称未設定
07/11/14 22:46:16 iClwHio80
CGSGetOnScreenWindowListで取得したウィンドウに対して
CGSSetWindowLevelによりウィンドウレベルを設定しようとしています。
自アプリのウィンドウは変更されるのですが、
他アプリのウィンドウはエラーが返ります。
同じくTransitoinWindowでウィンドウを操作しようとしますが、
他アプリのウィンドウは操作出来ません。
どなたか他アプリのウィンドウを操作する方法をご存知ないでしょうか?

618:名称未設定
07/11/14 23:09:12 jAWzhafe0
他アプリのウィンドウの参照をどうやって取ったの?

619:名称未設定
07/11/14 23:12:58 jAWzhafe0
あああ、上のレスは忘れて

620:名称未設定
07/11/14 23:23:01 Xis7E2030
>>615
ソースが公開されているが読んでもよくわからん

621:名称未設定
07/11/15 00:45:47 GB5EBmPl0
>>609
QuickSilver オープンソースになったよ
blacktree-alchemy でぐぐれ

622:名称未設定
07/11/15 12:46:30 Mwb686F+0
時々Getterコードで
-(Foo*) foo
{
return [[foo retain] autolerease];
}
というコードを見るんだけど、何か意味があるの?

623:名称未設定
07/11/15 13:06:16 7a7zfmZx0
AutoReleasePoolが解放されるまでの間保持させるってことだろ。

624:名称未設定
07/11/15 13:08:13 woMNQIGU0
呼び出した後に元のクラスを解放することを想定してんじゃね?

625:名称未設定
07/11/15 13:29:39 9q45mP2D0
しかしCocoaのポリシーとしては、そういう場合はgetterを呼び出した側が(必要なら)retain-autoreleaseしなさいと言っているように見える。
URLリンク(developer.apple.com)

626:名称未設定
07/11/15 13:48:25 o0uKsE520
Leopardで刷新されたMac OS X対応開発言語「Objective-C 2.0」の真価を探る
URLリンク(journal.mycom.co.jp)

627:名称未設定
07/11/15 14:16:50 7a7zfmZx0
propertyのとこ、おかしくないか?
インスタンス変数がNSString * _name;だとエラーになるんじゃね?

628:名称未設定
07/11/15 18:06:34 yJVNynki0
プロパティとかブロック構文みたいのとか便利だと思うけどLeopard専用じゃあすぐには手を出しにくいなあ
記事にもあるけどせめて10.4くらいから動いてくれないと

629:名称未設定
07/11/15 19:42:11 7a7zfmZx0
Objective-C 2.0にするとTigerをサポート出来なくなるからな。後、2年くらいは
Tigerをサポートしたいし。

10.4.11でObjective-C 2.0のランタイムをサポートしてくれれば良かったのに。

630:名称未設定
07/11/15 22:27:57 OxRPElrt0
Xcode3ではなんと!!!!!!!!
@"あいうえお" が使える!!!!!!!
うれしい!!!!!!!

631:名称未設定
07/11/16 00:48:51 qefaGqef0
>>630
>@"あいうえお"

なにおきてもしらんど


632:名称未設定
07/11/16 08:32:57 oGZ+fjo20
>>625
>>622 と同じ例もあったりするけどね。

URLリンク(developer.apple.com)

どうなんだろうなあ。とりあえずコード的にはこっちの方がすっきりするが...
中がどうなってるか分からない getter から返ってきたオブジェクトはは常に retain
しなきゃいけないとすると、めんどくさいなあ。

633:名称未設定
07/11/16 11:47:44 N3h5kz0i0
>>632
信頼できないライブラリなら retain ではなく copy するべきかもね。
返された NSString が実は NSMutableString で、知らないうちに内容
が書き変わっていたりするかもしれんしw

634:名称未設定
07/11/16 12:09:30 cNV2hLUV0
>>632
GC 無し Cocoa では、init.... もしくは copy... 以外のメソッドから
返ってきた id を保持する場合は retain すべしという決まりになっていた
気がするんですが。

635:名称未設定
07/11/16 12:19:47 CbzyFQzY0
>>631
うそーん。なんで?

636:名称未設定
07/11/16 20:39:40 CUEn9uCm0
>>626>>622と似たようなコードの例が載ってて、それはマルチスレッドに対応するためらしい。
似てると言っても結構違うけど。

637:名称未設定
07/11/16 21:36:04 tvhXsAYJ0
>>632
getter/setterの組み合わせで、ひとつのautorelease poolの中でdeallocされないようにする
ということが目的なので、リンク先のListing3-6・3-7のどちらかを選べばよいということだと思います。
3-6のgetterと3-7のsetterの組み合わせで書いてしまったりすると、getした直後にsetされるとアウト。

retainする必要があるのはautorelease poolのサイクルの外で取得したオブジェクトを使いたいときですよね。
インスタンス変数に保持するとか、別スレッドから参照するとか。

>>636
マルチスレッドもautorelease poolに関してのことだから同じ話だと思いますよ。


638:名称未設定
07/11/16 23:23:35 hGnpQD7r0
>>626とかみて今まで不思議だったんだけど、nilのオブジェクトに
メッセージ送っても安全なんですかね?
retainやreleaseはnilチェック無しでもOKなんですか?

639:名称未設定
07/11/16 23:44:09 U4RUIbsl0
>>638
問題ない。

ついでにいえば ヒレガス本 p44にそのまんま書いてある。


640:名称未設定
07/11/16 23:47:58 WI/houEB0
>>638
先越されたが、メッセージ送信自体は安全らしい。
URLリンク(developer.apple.com)

ところで>>626のリンク先にnilにメッセージ送ってるコードある?

641:名称未設定
07/11/16 23:52:36 OhjYmzCB0
ぬるぽ!

642:638
07/11/17 03:22:18 kGkshqIg0
>>639-640
ありがと。いままでnilチェックしてたわ。他の言語なら
余裕で落ちると思ったけど。結構アバウトに動くのね。

>>626は_nameの初期値がnilだろうから・・・いいのかな?って感じに。

643:622
07/11/17 09:00:15 aQOoTe4X0
>>623
>>624
ありがとう!。でもそういう使い方を,,,,,,するかも(ゾッ)
プログラムを見直してみよ

644:名称未設定
07/11/18 12:38:23 YFIOeH3f0
>>637
>ということが目的なので、リンク先のListing3-6・3-7のどちらかを選べばよいということだと思います。

そういうことを疑問に思っているんじゃなくて。

>retainする必要があるのはautorelease poolのサイクルの外で取得したオブジェクトを使いたいときですよね。

上の文は、「サイクルの外で」で切れるんだろうなあ。最初「外で取得した」と読めた。

ともかく、getter の中で何をやっているのかわからないときがあって(ソースのないクラスとか)、
そうするとオブジェクトが autorelease pool に登録されてるかよくわからないだろ。

645:名称未設定
07/11/18 13:27:12 xb1Ii9wH0
「よくわからない」、じゃなくて、
getter から返ってきたのをインスタンス変数等に
保持したい場合はretain しないといけない、
保持しないで今の関数で使い捨てのときはなにもしなくていい、
というのが「きまり」じゃないの?

getter はそう使われて問題ないように組みなさいということのはずでしょ。
すくなくとも Cocoa の API は全部そうなっているんでは。

ネットに落ちてるフリーのライブラリもそれに準拠してると思ってたけども。

URLリンク(developer.apple.com)

646:名称未設定
07/11/18 14:17:29 6Cn1RaWD0
>「よくわからない」、じゃなくて、
>getter から返ってきたのをインスタンス変数等に
>保持したい場合はretain しないといけない、
>保持しないで今の関数で使い捨てのときはなにもしなくていい、
>というのが「きまり」じゃないの?

そんな基本的なレベルの話じゃなくて、「今の関数で使い捨て」しようとしたときでも、
getterの直後に別スレッドでsetterが呼ばれて、(getterによって返された)古いオブジェクトが解放された
とか、
getterの直後に別スレッドが(そのgetterメソッドを持っている)オブジェクトを解放した
とかいうケースの話をしてるんじゃないの?
こんな場合にも対応するには、getterによって返されるオブジェクトがたとえ「今の関数で使い捨て」であったとしても、
それをautorelease poolに入れるというのが一つの手なんだけど、それを誰がやるのか、ってことでしょ。

647:名称未設定
07/11/18 14:49:43 xb1Ii9wH0
なるほど、それは失礼しました。
Cocoa のマルチスレッドは全く判っていないので、勉強します ...

648:名称未設定
07/11/18 15:17:43 6Cn1RaWD0
>getterによって返されるオブジェクトがたとえ「今の関数で使い捨て」であったとしても、
>それをautorelease poolに入れるというのが一つの手なんだけど、それを誰がやるのか、ってことでしょ。

で、getterを呼び出した側でretainしようにも、その前に別スレッドで解放されたら終わりなので、結局getter自身でretain-autoreleaseするしかないと。
てことは、thread-safeを謳っているライブラリについては、getter側でretain-autoreleaseしていることを想定していいのかなぁ?

649:名称未設定
07/11/18 21:52:08 MNuVJVruO
Cocoaは難しい

650:名称未設定
07/11/18 22:23:41 DA9RCPIX0
確かに安定したソフトを作るのは難しいかも
まあ、リソースを確保したままで終わるような簡単なソフトは簡単だけどね

651:名称未設定
07/11/19 15:27:16 02ojrBP20
Cocoaってそんなに難しいのか? 比較対象がToolboxしか知らんからわかんね。

652:名称未設定
07/11/19 15:38:10 LV7+iq+v0
Toolboxに較べたら簡単だろう。Toolboxみたいに冗長で神秘の呪文を何度も
唱える必要がないだけでもありがたいくらいだ。部品も結構揃ってるので
本来やるべき仕事の部分に集中出来る。

653:名称未設定
07/11/19 16:40:12 LvFFLwZ10
フレームワークの充実度で圧勝。

654:名称未設定
07/11/19 17:00:29 PeaucL070
Toolboxに比べる事自体Cocoaに失礼

655:名称未設定
07/11/19 17:44:27 In4q82oq0
Interface builder にでてくる File's Owner, 1st Responder というのを理解するまではわけわからんかったが、その後は楽勝だった

656:名称未設定
07/11/19 17:52:00 9E3IVsAz0
このスレ住人のXcode 3.0への移行具合はどうよ

XcodeでClassを書く(Interface BuilderでClassが作れない)
Interface BuilderでのAnimationが設定できる
などなど変更点山盛りで覚えること多数で苦戦してんだけど

657:名称未設定
07/11/19 17:55:48 In4q82oq0
確かに instantiate class... というメニューが
IB になかったからどうしようかしばらく困った。
でもこれまでからなぜか Xcode でクラス作ってたのでそんなに変わってないです。

あと自分用の小さなソフトしか作ってないので、
GC on にして手抜きしまくりです。

Animation のつかいかたは判ってないです ...

658:名称未設定
07/11/19 18:13:08 LV7+iq+v0
IBからクラスを生成するとヘッダやソースのコメントが抜けてさみしいので
大抵の場合クラスを作ってからIBでactionやらoutletにつなげてた。
さすがにXcode3.0には戸惑ったが、まぁ何とかなりそうだ。

659:名称未設定
07/11/19 19:00:01 PeaucL070
>>658
> Bからクラスを生成するとヘッダやソースのコメントが抜けてさみしいので
> 大抵の場合クラスを作ってからIBでactionやらoutletにつなげてた。
俺も同じw

660:名称未設定
07/11/19 19:55:30 dZtoqNKV0
InterfaceBuilder3.0では、
Main.nibの中にFile'sOwnerとApplicationっていうインスタンスが入っているけど、
これって同じもん?っていうか前はFile'sOwnerがIB上からのApplication
インスタンスへの入り口ってつもりだったんだが。。。

661:名称未設定
07/11/19 21:10:34 uwOj8SG90
MainMenu.nibの場合は、同じ。

662:660
07/11/19 21:51:45 9Yj++wrA0
>>661
ありがと。ってことはMainMenu.nib以外では、違うってことだろうか。
ちょっくら試してみます。

 あと、IB3.0のライブラリには、いろいろ便利そうな新規クラスが
 入っているみたいだけど、これらの使い方をどこかのスーパー
 プログラマーがさっくりと分かりやすい日本語チュートリアル
 作って公開してくんないかなー。(他力本願)

663:名称未設定
07/11/19 21:56:31 PeaucL070
URLリンク(journal.mycom.co.jp)
に、
- (NSString*)name
{
@synchronized(self) {
return [[_name retain] autorelase];
}
}
ってコードがあるけど、ここの@synchronizedの対象って_nameじゃダメなの?

664:名称未設定
07/11/19 22:01:37 MSo6PDwW0
それにしても独特な開発環境だよね
洞察力の訓練には最適かもw

665:名称未設定
07/11/19 22:34:43 KUTYWe1G0
>>663
setName:をどう書くか悩むからだめ。

666:名称未設定
07/11/19 23:08:49 +8DQ+G5D0
そういえばnilへのsynchronizeの挙動って定義されてたっけ?

667:名称未設定
07/11/20 12:18:19 xK/rJZ3Z0
>>662
File's Owner はその NIB を開いた際にプログラム側から nib's owner として登録されたオブジェクトになる。
MainMenu.nib は自動的に NSApp が開いて、File's Owner は NSApp。
ドキュメント型ソフトのばあいは、NSDocument が nib を開くので、
File's Owner は自分でつくった NSDocument のサブクラスになる。

それ以外に nib をつくって、自分でプログラムからあからさまに開く際は
File's Owner を自分で設定する。

668:662
07/11/20 19:03:19 vX1nP8Nx0
>>667
なるほど!っていうか初めてFile's Ownerの
役割が分かりますた。
簡潔且つ的確なご説明ありがとうございます。

669:名称未設定
07/11/21 20:17:19 G817xlPC0
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
の中でmenuItemに対してsetState:とかtagを呼ぶと
'tag' not found in protocol(s)
とか言われてしまうんだけどなんでだろう?

670:名称未設定
07/11/21 22:56:41 sg+XtEJO0
知らんけど、NSMenuItemがプロトコルだからじゃね?
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;//引数menuItemはNSMenuItemプロトコル
- (BOOL)validateMenuItem:(NSMenuItem*)menuItem;//引数menuItemはNSMenuItemクラス
って事かなー。




671:名称未設定
07/11/21 23:17:07 hTxVVTev0
>>669
まずヘッダを確認してみてはいかがでしょう。
ウチのxCode2.4ではdeprecatedだけど一応使えるみたい。

672:名称未設定
07/11/22 00:53:05 NI+W3MNs0
ありゃ、プロトコル自体がdeprecatedだったのか
警告が「プロトコルの中にないよ」って書いてあるもんだから、
NSMenuItemプロトコルの中を見てちゃんとあるのに変だな~と混乱してた
失礼しました

結局>>670みたいに書き直しなさいということね

673:名称未設定
07/11/22 11:59:27 Krn36QQ60
質問です。

まずNSWindowのサブクラスMyWindowにNSViewのサブクラスMyViewが乗っています。
ここでMyWindowにinitWithContentRect:をオーバライドして、
中で[super initWithContentRect:...]と典型的な初期化をしているのですが
この引数に任意のrectを渡した場合にMyViewのサイズを合わせるにはどうすればいいのでしょうか。

IBでAutosizingを設定しても聞いてくれなくて。

674:名称未設定
07/11/22 17:12:56 kaRw/iTz0
行を選択するたびにそのイベンオをとらえて処理をしたいと考えてます。

- (IBAction)tableViewSelected:(id)sender
{
    row = [sender selectedRow];
    NSLog(@"the user just clicked on row %d", row);
}
そこで,上記では行を選択すると選択した行番号を得られるのですが,
行番号ではなくオブジェクトを得られる方法はありますか?

IBAction はCore Dataで作ったTableViewとAppDelegateでつないであります。
なので、クリックされた行のNSManagedObjectが得られるといいのですが,
直接的な方法はないものかと。


675:名称未設定
07/11/22 21:10:09 a/peNeZj0
NSArrayController 使って bind させればいいんじゃないの?

676:名称未設定
07/11/22 22:03:28 GA2XBdAS0
> まずNSWindowのサブクラスMyWindowにNSViewのサブクラスMyViewが乗っています。
> ここでMyWindowにinitWithContentRect:をオーバライドして、
> 中で[super initWithContentRect:...]と典型的な初期化をしているのですが
> この引数に任意のrectを渡した場合にMyViewのサイズを合わせるにはどうすればいいのでしょうか。

状況がいまいちよく分からないが、
MyWindowの上にMyViewが乗ってるっていうのは、IBで乗せてるの?
ならば、nibファイルからMyWindowが生成されるので、初期化にはinitWithCoder:が使われるはず。
initWithContentRect:でMyWindowを生成しているなら、手動でMyViewを乗せることになるはず、
IBでAutosizingを設定っていうのも、ちょっと変な気が。

677:名称未設定
07/11/22 22:22:26 Krn36QQ60
>>676
IBでMyWindowにMyViewを乗せています。
@implementation MyWindow
- (id) initWithContentRect: ...
{ NSWindow* w = [super initWithContentRect: ...]; return w; }
@end
のような記述をしていて、このときMyViewは手動で乗せなくても表示されています。

また、Autosizingでウィンドウに合うようにMyViewを―~~―な状態にしておけば、
ユーザがGUI上でリサイズをしてもMyViewのサイズが変わっています。

表示した後マウスでリサイズする分には問題が無いわけですが、
上記initWithContentRect:の中で任意のrectを指示した時に
初期のMyViewのサイズがIBで指示したサイズになってしまうのです。
これは手動でMyViewを生成するべきなのでしょうか?


678:名称未設定
07/11/22 23:50:05 T7a7mhhK0
>>677
awakeFromNibで設定するのが簡単だと思う。

679:名称未設定
07/11/23 00:34:54 1Oijf2vw0
>>677
IBでインスタンス化したオブジェクトはアーカイブされてnibファイルに格納されて
プログラムで読み込むときはアンアーカイブして取り出すので
初期化メソッドはプログラム中では呼ばれない

はず
nib上のオブジェクトを初期化するにはawakeFromNibを使いましょう

680:674
07/11/23 10:22:00 GeUHqHT60
>>675
どうも
NSArrayControllerを使ってBindするというのは、
具体的にはどうすればいいのですか?

NSArrayControllerのインスペクタのBindをみても
NSTableViewのクリック関する項目はないのですが。

681:名称未設定
07/11/23 10:49:36 hcJ8Hx2n0
NSTableView の binding のところで、中身を
NSArrayController の content とかに設定して、
NSArrayController のほうを CoreData につないでください。
ADC のどっかにチュートリアルがあったはず。

682:675
07/11/23 12:06:28 gHJ1tYgX0
>>680
行の選択が変化したかどうかは KVO で見る

NSArrayController の例えば selectionIndex とかを addObserver で登録して、
observeValueForKeyPath の中で、そのときに NSArrayController に
選択されている NSManagedObject を取り出す


683:674
07/11/23 12:37:53 GeUHqHT60
>>682
>>681
素早い応答ありがとうございました。

ADCのチュートリアルを教えてください。
Core Data Programming Guideをみたり
table view bind で検索しましたが,
それらしいものが見つからなくって。

まだまだ初心者なので,インスペクタの設定や
サンプルコードがないとピンとこなくて。
すいません。

もしサンプルプロジェクトをダウンロードできるサイトがあったら
教えてください。

684:名称未設定
07/11/23 12:51:39 hcJ8Hx2n0
英語だけど、apple のこれ
URLリンク(developer.apple.com)
はビデオ付き。まさに tableview につないでるから。
あと、Scott Stevenson の
URLリンク(cocoadevcentral.com)
もわかりやすい。
というかそこの記事はどれもこれもわかりやすいので、おすすめ。

あと、mkino さんのところにも解説ありそうだけど、どうでしょう?
すくなくとも本の第三版にはのってるらしいけど、持ってないのでわからん。


685:名称未設定
07/11/23 13:02:19 iA/8JIe10
binding ってバカを量産する仕組みなんだろうか

686:675
07/11/23 13:08:18 gHJ1tYgX0
>>683
table view の bind じゃないです

MVC のパターンにして
M: Core Data
V: NSTableView
C: NSArrayController
で、それらの間を binding で結んで、table の変化を見るのではなくて
NSArrayController の selection の変化を見る、ということ
で、NSArrayController の selection の変化は key value observing で見る

アプリケーション本体の方には NSTableView ではなく
NSArrayController の方をつないで、そこに選択されている
NSManagedObject を取り出せば、それが NSTableView で
選択されている NSManagedObject と同じものになります

サンプルコードはわからないけど、ドキュメントなら、
Core Data Programming Guide 以外なら
Cocoa Bindings
URLリンク(developer.apple.com)

Key Value Observing
URLリンク(developer.apple.com)

とか


687:名称未設定
07/11/23 15:23:08 NQ+7IO3Q0
>>685
自分の頭の中のCocoaはbindingが導入される前で止まってるw
未だに使った事が無い恐がりの俺

688:名称未設定
07/11/23 15:40:43 vBC4oFan0
bindingとpropertyは職業プログラマ用だろ。
garbage collectionは量産しそうだけど、いいんでない?

689:名称未設定
07/11/23 16:07:53 hcJ8Hx2n0
>>687
binding は Panther で追加された頃は IB での扱いがひどかったけど、
(設定しても反映されない等、)最近は随分安定している気がする。

690:名称未設定
07/11/23 16:08:47 40+P0Y410
>>688
いや、Bindingだけは素人でもきちんと使えるようにすべき
MVC、KVCできちんと書けるようになるからな


691:名称未設定
07/11/23 17:45:45 /aNuome90
メモリ管理をあまり理解しないまま、KVCを使っていると知らない間に
大量のメモリリークを生みだしそうな気がする
まあ、GC前提なら問題ないけどね

692:名称未設定
07/11/23 19:05:51 gj7dOudc0
>>689
俺未だにPanther使ってるけど、そんなことないぞ。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch