1 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 12:18:31 ] Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。 (Wikipedia:ja.wikipedia.org/wiki/Objective-C より) 前スレ pc11.2ch.net/test/read.cgi/tech/1106983092/ 前々スレ pc5.2ch.net/tech/kako/990/990574267.html
446 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 17:40:36 ] >>444 サンクス 各言語の違いが全くわからないのでググって検討してみます C#よりC++の方がいいんですね >>445 サンクス 意欲・・・きっかけがそもそもiPhoneという厨な理由だからどこまでいけるか わかりませんが・・・ >AppleのドキュメントもC言語の基礎知識とかを前提にしている感あり やっぱりC関連から入った方がいいのかもしれませんね
447 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 17:51:48 ] >>446 そういう動機であれば最初はRuby on RailsとかでWebアプリを作成してiPhoneから利用すれば簡単だと思う。 そういう資料はネット上に沢山転がってるからググって見るといいよ。 ある程度プログラミングに自信が付いてからObjective-Cに移行すればスムーズに学習できそう。 こういう順番でやれば、サーバーサイドとクライアントサイドの両方の知識が得られる。 両方の視点でプログラミングできればiPhoneに負荷をかけないプログラムを作成するノウハウも見つけられると思う。
448 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 18:22:14 ] >>447 ありがとう。なんて親切なんだ(つД`)・゚・ Ruby on Railsを調べてみます
449 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 18:46:27 ] ObjCの前にCはやっといた方が良いけど、C++は覚えなくてOK. (C++専用のライブラリを使いたいのでもなければ) C#はiPhoneでの開発には全く不要。 iPhone用プログラムならまずWebアプリから作ってみるというのには賛成。 PHPでベタ書きか、Python + DjangoかRurby + Railsあたりがおすすめ。
450 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 18:58:24 ] >>449 dクス。感涙で前が見えない。゚(゚´Д`゚)゜。 うーむ、C++でもC#でもなく初代Cがいいのか・・・ iPhone用ゲームの開発が主目的なんですが、やはりWebアプリから学んでいったほうが いいんですかね?
451 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 19:21:49 ] 明確にiPhone開発がしたいならObjCから始めるべきだと思う. モチベーションは全てに優先するよ.
452 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 19:32:08 ] うむ、iPhone Application Tutorialからど〜ぞ。
453 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 20:03:11 ] 皆さんありがとう 明日Amazonから萩原本が届くのでとりあえず読んでみます(`・ω・´)
454 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 20:33:13 ] まてまて、荻原本はプログラミング初学者には敷居が高いぞ。 他言語でokなので、何かしらの入門本を読んでからの方が良いと思われ。
455 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 20:43:01 ] 初めてで萩原本読むくらいなら、 英和辞書片手にヒレガス本第3版読んだ方が良さそうだな。 平易な文体だから高校生以上なら辞書なしでも 大体のフィーリングは掴めると思うし、スクリーンショットや挿し絵も多いしな。
456 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 20:46:52 ] >>454 >>455 Σ (゚Д゚;) そ、そうなのか・・・ では上で教えてもらったCとか、Ruby on Railsとかの入門書から挑戦してみます ヒレガス本第3版というのも見てみます(洋書は気おくれしそうですが・・・) ありがとう ってか皆さん滅茶苦茶お詳しいっすね・・・(;´Д`)
457 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 20:50:31 ] 個人的な趣味としてRubyと Railsを押すけど、webアプリを作って外部に公開する場合レンサバ借りるときにいろいろ困ることがあるよ。 英語が得意なら海外でRails向けのホスティングサービスがあるけどね。 iPhoneアプリを作りたい位だからLeopardユーザだと思うけど、 TextMateってテキストエディタをDLしてきて p "Hello World" って書いて拡張子を rb 保存して Command+Rをするだけで実行できて楽だと思う。 ってスレ違いになるからこのくらいにしておく。 その心意気はすばらしいけど、荻原本はまったくもってプログラミング初心者が読む本じゃないよ。
458 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 21:25:47 ] でもObjective-Cの仕様なんてCに毛が生えたようなもんだし、 Objective-Cの書籍として荻原本はベストな選択の一つなのは間違いない。 強いて言うなら、Cの入門書とCocoaフレームワークやInterface Builderに ついての本を一冊ずつ買っとくといいと思う。
459 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 22:16:38 ] >>457 >>458 アドバイスサンクス 道は一本じゃなさそうなのでいろいろ齧ってみます しかしプログラムの道は高く険しいなぁ・・・
460 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 23:21:38 ] >>459 あと、iPhone プログラムを突然はじめるより、いちど OS X 用の小さいプログラムを書いてから iPhone にいったほうがわかりやすいかもしれない。 大体構造いっしょだし、OS X 用プログラムの書き方のほうがネットに沢山ころがってます。
461 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 23:25:19 ] >うーむ、C++でもC#でもなく初代Cがいいのか・・・ Obj-C は C++ と同時期に(80年代) C から派生した言語なので、まあ並列だよ。 べつに C++ を勉強したから Obj-C がわかりやすいとかその逆ということではないです。 両方ともオブジェクト指向だけど、毛色が360度違います。 C# は Java のクローンだよね。Java 自体が C, Obj-C, C++ を参考に開発されたものだし。
462 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 23:49:02 ] C#、特にC# 3.0はJavaより強力な言語になってるよ。 ただ実質的に実行環境や開発環境がWindowsに限られるのが難。(Monoもあるけど) MS製の環境にどっぷり浸かるならば良いとは思う。VS.Netも強力だし。 ただiPhoneの開発には使えないし、応用できるテクもおそらく無いw
463 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 23:53:15 ] 勘違いさんいらっしゃーい >>462 はいさようなら。
464 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 23:55:19 ] >>460 >>461 >>462 俺みたいなクレクレ厨にここまで親切にアドバイスしてくれるなんて・・・ みんな優しいな。゚(゚´Д`゚)゜。 よその板なら「ググれやカス」で終わっても不思議じゃないのに・・・ ありがとう、このご恩は忘れませぬ ノシ Windowsのゲーム作りならC#がいい、って聞いたことあるので いつかC#も触ってみます
465 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 23:58:27 ] >>464 >このご恩は忘れませぬ 検討を祈る。成功したら後輩に優しくな!
466 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 23:59:10 ] 自作er乙
467 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 00:14:15 ] iPhoneアプリに関しては正式に配布できるような形のプログラムのTipsとかは現時点ではNDAがあるからないに等しい。 Appleのサンプルプログラムくらいしかソースも読めない。 Objective-Cをやるなら >>460 が言うようにMacアプリからやった方が現時点ではいいだろうね。
468 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 13:19:01 ] Mac用だけどObjective-Cの入門記事です。 journal.mycom.co.jp/column/objc/index.html
469 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 13:36:38 ] Objective-CってVisitor Patternが使えないの?
470 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 18:39:27 ] え?
471 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 19:03:20 ] そもそも visitor pattern なんて使わないだろ
472 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 19:03:52 ] Visitor Patternを使うのに、何か問題でも?
473 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 20:49:15 ] Visitor Patternといえば木構造の処理系作成に使ったことがある。 でも、Objective-Cはメソッドオーバーロード出来ないから特殊な方法でやった。 普通の意味でならVisitor Patternが使えないのは本当。
474 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 21:05:42 ] Visitor Patternって、メソッドのオーバーロードができないと、実装できないんだっけ? オーバーロードって、引数の型によって「静的に」同じ名前のメソッドを区別するためのものなんだから、プログラムの構造に影響しないように思えるけど。 単純に複数の名前のメソッドを使い分けるだけでは?
475 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:08:31 ] >単純に複数の名前のメソッドを使い分けるだけでは? そんなメンテナンス性の悪いコーディングしてどうする
476 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:41:48 ] ようするに void action(A obj) void action(B obj) と定義されていたものが、 void actionWithA(id obj) void actionWithB(id obj) となるだけだから、ソースコードの見た目の問題はあるけど、Visitor Patternが実装できない理由にはならないよね?
477 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:55:39 ] 今帰宅 萩原本届いてた ちょっと読んでみた (´;ω;`) ・・・。 やっぱりCの入門書から読みます >>467 >>468 ありがとう 心折れかけたけど地道に頑張ります
478 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:13:32 ] >>477 まあプログラミングにも王道は無しだよ。あなたの今のように謙虚な気持ちを忘れなければきっとできるようになります。 あと、C のポインタのあたり、文字列操作の細かい話は あまり勉強しなくても大丈夫なので読み飛ばしてください。
479 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:23:20 ] おいおい、ポインタはいるだろ。 Cocoaだって最近のAPIはNSError **が大量にあるだろ。
480 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:26:42 ] ポインタってみんなどういうところでつまづくの? 「変数を入れてるメモリエリアのアドレスを渡す。」 それ以上になにか必要か?
481 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:32:40 ] 478 ですが、全然いらないというつもりはないんだけど。 >>480 さんの言ったことを言いたかったです。言葉が足りませんでした。 & と * はわかっておいたほうがいいけど、Objective-C ではそれで充分だよね。 malloc / free は要らないし、ポインタ演算 (足し算引き算) は要らないでしょ。 あと、配列は知らなくてもいいし、配列とポインタの等価性も要らないし、 文字列が char* 配列だということも知らなくてなんとかなるのでは。
482 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:56:38 ] >>476 >ソースコードの見た目の問題はあるけど、Visitor Patternが実装できない理由にはならないよね? それで多重継承や多重ディスパッチを出来ると強弁するならご勝手にw
483 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:01:28 ] >>480 >配列とポインタの等価性 エキスパートC読んでこれが嘘だと理解した。こういうところに躓きの原因がある。>>481 はわかっていない。
484 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:13:51 ] >>482 Obj-C は reflection があるから多重ディスパッチはむしろ実装しやすい気が ... visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。 とわからない言葉をならべてみる
485 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:15:10 ] >エキスパートC読んでこれが嘘だと理解した。こういうところに躓きの原因がある。 いやまあ、Objective C スレとしては、そのへんでひっかかろうがひっかかるまいが Objective C では必要ないよというので充分なのでは。
486 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:19:14 ] こういうスレで嘘は良くないのではないかい?
487 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:34:22 ] 世の中には平気で嘘をつける人がいる。 嘘を指摘されるとそういうものは必要ないと言いだす。 そういう無反省な態度は無自覚に行われるから本人は嘘を良くないとは考えていない。
488 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:41:12 ] >>484 >visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。 ほんと馬鹿。逝ってよし。
489 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:09:23 ] 481 ですが、嘘を付いてすいませんでした。 折角なので配列とポインタがどんなふうに違うかわかりやすく教えてください ...
490 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:18:07 ] www.cocoadev.com/index.pl?VisitorPattern でも同じような議論になってる
491 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:48:48 ] >>364 でも同じような議論になってる 嘘つきはお断り
492 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:52:06 ] >>489 C FAQ
493 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 03:46:16 ] >>489 ぐぐれカス
494 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 05:46:43 ] >>483 たしかにそうだ なんとなく分かってるつもりでも 間違って覚えてるケースが結構ある 正しい理解が必要
495 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 06:28:26 ] 嘘つき語録 >>474 Visitor Patternって、メソッドのオーバーロードができないと、実装できないんだっけ? オーバーロードって、引数の型によって「静的に」同じ名前のメソッドを区別するためのものなんだから、プログラムの構造に影響しないように思えるけど。 単純に複数の名前のメソッドを使い分けるだけでは? >>476 ようするに void action(A obj) void action(B obj) と定義されていたものが、 void actionWithA(id obj) void actionWithB(id obj) となるだけだから、ソースコードの見た目の問題はあるけど、Visitor Patternが実装できない理由にはならないよね? >>478 @C のポインタのあたり、A文字列操作の細かい話はあまり勉強しなくても大丈夫なので読み飛ばしてください。 >>481 Bmalloc / free は要らないし、Cポインタ演算 (足し算引き算) は要らないでしょ。 あと、D配列は知らなくてもいいし、E配列とポインタの等価性も要らないし、 F文字列が char* 配列だということも知らなくてなんとかなるのでは。 >>484 Obj-C は reflection があるから多重ディスパッチはむしろ実装しやすい気が ... visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。 とわからない言葉をならべてみる
496 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 07:42:09 ] 他はしらんが、C における文字列操作の細かい話は勉強しなくてもいいのは本当では?strstr とか知っててもしかたないよね。NSString でいいんじゃね?
497 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:19:11 ] いろいろな言語の文字列操作関数の比較表 Ruby, Python, JavaScript, Perl, C++ 0xcc.net/blog/archives/000137.html Ruby, PHP, Objective-C d.hatena.ne.jp/hetima/20061025/1161773698 意外とObjective-Cも健闘してる希ガス。 実際にOpen環境(イワユル野良SDK)でのプログラミングが公開されているので以下に紹介する。 テキストエディタの作成のところでもNSStringを使ってる。 第1回:iPod touchにアプリケーションがインストールできる不思議 www.thinkit.co.jp/free/article/0711/9/1/ 第2回:iPod touchの自作アプリケーションが作れる&動かせる! www.thinkit.co.jp/free/article/0711/9/2/ 第3回:iPod touchで動作するテキストエディタはこう作る! www.thinkit.co.jp/free/article/0711/9/3/ 第4回:夢のオフラインRSSリーダを作ろう! www.thinkit.co.jp/free/article/0711/9/4/
498 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:27:53 ] 実際のHello Worldプログラムを紹介する。(その1) // hello.m #import <UIKit/UIKit.h> #import "HelloApplication.h" int main(int argc, char **argv) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; return UIApplicationMain(argc, argv, [HelloApplication class]); }
499 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:28:40 ] >>497 >実際にOpen環境(イワユル野良SDK)でのプログラミングが公開されているので以下に紹介する。 >テキストエディタの作成のところでもNSStringを使ってる。 べつに NSString の使い方を示すのなら 「実際に」iPhone じゃなくて「実際に」Mac / GnuStep でいいのでは...
500 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:28:56 ] (その2) // HelloApplication.h #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import <UIKit/UIApplication.h> #import <UIKit/UIPushButton.h> #import <UIKit/UITableCell.h> #import <UIKit/UIImageAndTextTableCell.h> @interface HelloApplication : UIApplication { UIImageAndTextTableCell *pbCell; UITableCell *buttonCell; } @end
501 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:31:14 ] (その3) // HelloApplication.m #import <CoreFoundation/CoreFoundation.h> #import <Foundation/Foundation.h> #import <UIKit/CDStructures.h> #import <UIKit/UIPushButton.h> #import <UIKit/UIThreePartButton.h> #import <UIKit/UINavigationBar.h> #import <UIKit/UIWindow.h> #import <UIKit/UIView-Hierarchy.h> #import <UIKit/UIHardware.h> #import <UIKit/UITable.h> #import <UIKit/UITableCell.h> #import <UIKit/UITableColumn.h> #import "HelloApplication.h" @implementation HelloApplication - (int) numberOfRowsInTable: (UITable *)table { return 2; } - (UITableCell *) table: (UITable *)table cellForRow: (int)row column: (int)col { return row ? buttonCell : pbCell; }
502 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:33:15 ] (その4) - (UITableCell *) table: (UITable *)table cellForRow: (int)row column: (int)col reusing: (BOOL) reusing { return pbCell; } - (void) applicationDidFinishLaunching: (id) unused { UIWindow *window; BOOL i = TRUE; window = [[UIWindow alloc] initWithContentRect: [UIHardware fullScreenApplicationContentRect]]; pbCell = [[UIImageAndTextTableCell alloc] init]; [pbCell setTitle: [NSString stringWithFormat:@"Hello World!"]]; UIPushButton *button = [[UIThreePartButton alloc] initWithTitle: @"Touch Me"]; buttonCell = [[UITableCell alloc] init]; [buttonCell addSubview: button]; [button sizeToFit]; UITable *table = [[UITable alloc] initWithFrame: CGRectMake(0.0f, 48.0f, 320.0f, 480.0f - 16.0f - 32.0f)]; UITableColumn *col = [[UITableColumn alloc] initWithTitle: @"HelloApp" identifier: @"hello" width: 320.0f];
503 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:33:47 ] (その5) [window orderFront: self]; [window makeKey: self]; [window _setHidden: NO]; [table addTableColumn: col]; [table setDataSource: self]; [table setDelegate: self]; [table reloadData]; UINavigationBar *nav = [[UINavigationBar alloc] initWithFrame: CGRectMake( 0.0f, 0.0f, 320.0f, 48.0f)]; [nav showButtonsWithLeftTitle: @"Foo" rightTitle: @"Bar" leftBack: YES]; [nav setBarStyle: 0]; struct CGRect rect = [UIHardware fullScreenApplicationContentRect]; rect.origin.x = rect.origin.y = 0.0f; UIView *mainView; mainView = [[UIView alloc] initWithFrame: rect]; [mainView addSubview: nav]; [mainView addSubview: table]; [window setContentView: mainView]; } @end
504 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 10:10:59 ] 勘違いさんいらっしゃーい >>499 はいさようなら。
505 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:04:42 ] POCはMacじゃ使えないんですか?
506 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:23:12 ] めずらしく伸びてると思ったらもう夏休みなんだな… 小中学生ばっかりか
507 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:25:50 ] Objective-Cは、文字列を`char *'型にするか、NSStringオブジェクトにするか選択できるハイブリッド型であるということが特徴です。 これがObjective-CのほうがSmalltalkより高速な理由です。 別な観点から言えば、 Objective-Cプログラムのすべての要素がオブジェクトで表現されていたとしたら、おそらくSmalltalkと同程度の速度であり、 Smalltalkが行なえる基本クラスへの最適化がないことで苦戦するでしょう。 つまり、文字列操作の細かい話は勉強しなくてもいいと言っている人はObjective-Cのメリットを全く理解していないんです。
508 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:27:01 ] >>506 ボクが小学生だからってバカにするオマエがバカ!
509 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:33:53 ] >>505 PoweMacのみ。IntelMacでは動かない。EtoileはIntelMacでも動くよ。
510 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:47:16 ] >>507 ええと、一応聞いておくけど、本気でそう思っているのか ? おまえは全ての encoding に対応した文字列操作ルーチンを自分で書いて最適化できるのか ?
511 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:02:20 ] >おまえは全ての encoding に対応した文字列操作ルーチンを自分で書いて最適化できるのか ? 逆に質問しよう。なぜ、最適化という問題を持ち出したかと言えばオブジェクトのオーバーヘッドを理解しているからじゃないのか? 自分で最適化しないでも、問題を理解していれば、そういった処理を注意深く扱うようになる。それで速度的な問題を回避できるようになる。
512 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:12:05 ] 近頃の人ってsprintfとか使わんの?
513 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:48:32 ] 「文字列操作ルーチンを自分で書いて最適化できるのか ? 」って極端すぎるだろw よっぽど悔しかったのかw
514 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 14:11:34 ] >>512 sprintfなんて使ってるやつはばかです
515 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 14:25:30 ] >>514 理路整然とした理由も述べないで否定するだけなら小学生でもできる。 まさか小学生じゃないよな? sprintfとNSStringでの文字列操作の用例を挙げて比較したうえで なぜsprintfを使うのがばかなのか述べてくれないかなぁ。 これは非常に興味深いテーマだ、>>514 、君の意見が聞きたい。
516 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 14:37:03 ] sprintfのmanくらい読んでから質問してください
517 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 14:48:23 ] snprintfだろう常考
518 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 15:20:33 ] クズばっかだな
519 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 15:33:50 ] snprintf!! wwww 現場を知らない廚はコレだから困る。
520 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 15:37:21 ] >>514 の言い分けマダー?(゜∀゜)
521 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 16:30:50 ] わけけ?
522 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 16:52:33 ] >507 一行目は同感だけど、最終行は同意できない。 いまさら自力で文字列”操作”をする人はいないでしょ。 使うとしたら簡易パーサぐらいだろうけど、 それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。 それともこの程度のことも”操作”に入る? NSLogは改行されるし、妙な出力が追加されるんで、fprintfを使うことは多いよね。 >>516 +[NSString stringWithFormat:format, ...] がsprintf相当だね。
523 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 17:07:54 ] >一行目は同感だけど、最終行は同意できない。 結局、全く理解してないことを指摘されて図星だったのかw まともな反論も出来ないチンカスw
524 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 17:39:14 ] >いまさら自力で文字列”操作”をする人はいないでしょ。 >使うとしたら簡易パーサぐらいだろうけど、 >それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。 で、NSStringを使う利点まだぁ?チンチン その程度でC言語の文字列操作の細かい話は勉強しなくてもいい理由だって主張してるの?
525 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 17:56:20 ] 佐藤藍子 「NSStringさえあればもうNSStringC言語の文字列操作の細かい話は勉強しなくてもいいと思ってました」
526 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 18:27:42 ] ごめん。 人違いだわ、それ。 おれ、>522が初発言ね。 >NSStringを使う利点まだぁ? 楽だから。 べつにお勉強の為に文字列を操作するのは止めないけど、 お勉強以外であえて泥沼を選ぶ意図が俺には分からないね。
527 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 18:40:21 ] >>526 「>>514 じゃないけど」ぐらいことわってから書くぐらいしろよ。 間違われても仕方ないだろ。 まぎらわしいぞw
528 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 19:02:20 ] ごめん。 ID無いの忘れてたんだよ。
529 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:14:12 ] 外人さんがつくった Cocoa ソフトで日本語環境でつかうと おかしくなるのがあって、ソースみて原因追及してみたら 内部でアルファベットだけと仮定して char* で操作してるところのせい だったというのがあるので、char* のほうが速いかもしれませんが、 非日本人が使うかもしれないというのを考えて、 ShiftJIS / MacJapanese とかエンコーディングを仮定して char* を操作するプログラムを書くのではなくて、 NSString (か他の国際化文字列ライブラリ)をつかって書くようにして おいてくださると多分世界のどこかで誰かが助かります。
530 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:19:21 ] 文字を右から左に書く言語も考慮して作れということか?
531 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:31:05 ] NSString (とかほかの国際化文字ライブラリ) をつかっておくと、 自分で考えなくても自動的にある程度は考慮されたことになるというのが利点。 Mail.app にイスラエル人の知り合いからメールがきて、 名前欄がちゃんとヘブライ語になってたので感心しました。 まあきっと外人さんには名前欄に漢字が出る時点でびっくりなんだろうけど。 海外製のフリーウェアシェアウェアでも Cocoa なら大抵は 日本語問題なくつかえるのは一貫して NSString つかってあるからで、 (というと言い過ぎだと思いますが、) 昔の Carbon のころはそうではなかったです。 メニューバーとかよく化けてたでしょ。
532 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:39:10 ] >>529 君のまだ知らない世界にはユニコードっていうものがあってな
533 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:09:08 ] >>532 個人が作るソフトにはUTF-8なcharとかwchar_tを使わずに US-ASCIIかISO-8859-1前提でcharを使ってるのがままあるよ。 作者がUnicodeにする必要を感じてないから仕方ない。 Mac用のソフトだと素直にCocoaで作ればそんなことにはなりづらいけどね。
534 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:14:19 ] アホにわざわざ説明してやらんでも
535 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:16:53 ] >>522 >それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。 その辺に落ちてるのほとんどchar*になってるだろw NSString使わない方が良いみたいに読めてしまうw
536 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:18:38 ] UTF-8NとUTF-8はちと違うし、UTF-16にもUTF-16Nがあるんだよな。
537 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:27:05 ] >>535 >それともこの程度のことも”操作”に入る? も読んでね。 文字列を渡したり、もらったりも文字列操作に入れちゃうのか?
538 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 04:08:53 ] >>537 てかさぁ、ライブラリでパターンマッチングやバックトラッキング用のクラスを用意してその上に高級パーサとか正規表現ライブラリを構築してる例なんてあるの? なかったらどのみちchar*を使うんだから勉強せざるを得ないんじゃないのか?
539 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 05:30:58 ] char *は使うよ。 でも、文字列は操作しないよ。
540 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 05:39:33 ] 正規表現ならOgreKitがある
541 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 08:36:55 ] パーザをlex&yaccで作成するときにはまともなCの知識が必要だ。 上で言ってるObjective-Cの知識だけじゃどうにもならん場合はある。
542 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 09:02:36 ] そこまでする人間がまともなCの知識を持ってないというのも考えにくいような。 ちょっと凝ったことをするにはCで直に、あるいはObjCのラッパを書くことになるし Objective-Cだけで開発するには限界があるのは同意。
543 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:04:26 ] ここで正規表現とか持ち出す奴っていったい何なの? データベース使うJavaの人?BSDとかでスクリプト書いてる人? 文字列検索と文字列操作を美しく勘違いしてないかいw?
544 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:19:48 ] C言語の正規表現を使うにはregex.hをimportしてregcomp, regexec, regfree関数を利用する。 int regcomp(regex_t *preg, const char *regex, int cflags) 正規表現のコンパイルを行なう。コンパイル成功時には0を返す。 int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); 正規表現による検索を実行する。 void regfree(regex_t *preg) 正規表現パターンバッファを解放する。
545 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:28:06 ] >>544 通りすがりだが横から質問させて。 で?そのregcomp,regxec,regfree関数ってどういう時に使うの? sprintfとかscanfとか上の方で出てたNSStringの文字列操作と置き換えられるものなのかな? 教えてエロい人!
546 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:31:02 ] OgreKitとregex.h。OgreKit遅いやん。
547 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:35:06 ] >>546 ネーネーregex、OregKitとかいうのとsprintfは同じ機能のものなの? 文字列操作の話で来ているのになんで「正規表現」て出てきてegex、OregKitなの? ワカラナイ、ワカラナイ... 「お前が馬鹿だから」と言うの無しでちゃんと説明して!、初心者なので。
548 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:36:33 ] >>545 適当にググッた。嫁。サンプルコードだけ読めば簡単に分かる。 regex.h memo.majide.com/index.php?%A1%DAC%B8%C0%B8%EC%A1%DB%C0%B5%B5%AC%C9%BD%B8%BD sometime.minidns.net/~ccgi/posix_regex.html reglib.c ・・・ regcomp,regxec,regfree関数を使って、regsplit, regreplace, regrpall, regcnt関数を構築してる例 sometime.minidns.net/~ccgi/posix_reglib.html
549 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:41:36 ] 要するにプログラマは文字列操作をテーマとした意思の疎通も困難な程、コミュニケーション能力がないという事か。 sprintfに対してreglib使え?おいおい(w。 挙げ句は自分の言葉で説明できないからググッたコピペと来たよ。 これじゃプロジェクトが座礁してデスマーチにもなる罠。
550 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:42:11 ] >サンプルコードだけ読めば いや、走らしてみろ。即分かる。
551 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:43:09 ] >>549 はいはい、ワロスワロスw
552 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:47:24 ] prm1という変数があってユーザーが入力した値を入れ、メッセージに表示する為の文字列を作りたいと思います。 例:"prm1は不正な入力です。" sprintfではなくreglibで処理を行なうにはどのようにしたら良いでしょうか。 具体的なコードをここに書いてくださると助かります。
553 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:57:59 ] >>552 のこうげき 「かいしんのいちげき!」 >>551 の無能さが露呈した。
554 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:06:05 ] hoge.strings "hoge"="%sは不正な入力です。"; hoge.m ... id hoge = NSLocalizedStringFromTable(@"hoge", @"hoge", @"hoge"); hoge = [NSString stringWithFormat:hoge, prm1]; fprintf(strerr, "%s¥n", [hoge UTF8String]); ... てか、文字列操作の細かい部分をchar *でするかどうかの話でしょ? なんで話変わってんの?
555 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:06:47 ] >>549 >これじゃプロジェクトが座礁してデスマーチにもなる罠。 いやいや多分>>548 はプログラマですらないからwww iPhoneブームで注目度があがるの結構だけど、知ったかぶる廚も多くなるから嫌だね。
556 名前:522 mailto:sage [2008/07/20(日) 11:07:29 ] >>554 は俺ね。 また勘違いされる所だ(w
557 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:08:37 ] 上でlex&yaccの話が出てたと思うけど、文字列操作は字句解析と構文解析のふたつで出来てることが多い。 lexは字句解析のことで、文字列を1文字づつ読み込んでトークン、つまり単語に切り分ける仕事をする。 yaccは構文解析のことで、得られたトークンの意味を推測して構文木を作成する。 で、得られた構文木を元にして文字列の意味を翻訳する。 正規表現は、 テキストの文字列に対してパターンマッチを行う強力な道具です。 TEXTファイル中からある単語を置換/検索するのもパターンマッチです。 例えばyaccを使わないで簡易にキーワード(文法上重要なトークン)を探したいときのパターンマッチを正規表現でやるとか出来ます。 regex、OregKitは正規表現プログラムなのでそういったことが簡単に出来ます。 int sprintf(char *str, const char *format, ... ); sprintfは書式formatにしたがって、printf関数と同様の変換を行った出力を、文字列strに格納します。使えるようになると凄く便利。 char *str : 変換した出力を格納する文字列。 const char *format : 書式指定文字列。 ※ 要するに、正規表現は文字列のパターンマッチをするのに対して、sprintf関数は文字列を変換します。だから役割はちがう。
558 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:12:15 ] 煽らないと会話してもらえない可愛そうな香具師なのかな?
559 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:14:45 ] あ、あと出来上がった構文木はバックトラッキング(深さ優先探索)を使って各ノードをトラバース(順次訪れる)します。
560 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:15:58 ] 夏休みに入った途端に変な子が来たね
561 名前:547 mailto:sage [2008/07/20(日) 11:17:06 ] >>557 ありがとうございます! regex,OregKitはsprintfとは使い道が違うものなのですね。 困ったさんのおかげであやうく誤った知識を覚えてしまうところでした。
562 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:21:49 ] 例えば、Ruby on RailsみたいなWebアプリでやってるようなことをObjective-Cとかで実現したいとしよう。 プログラムには、字句解析と構文解析をする部分を作成してHTMLやXMLの中から必要な情報を抜き取る必要がある。 そういうときに、パターンマッチで必要な情報を見つける。そして、sprintf関数とかを使って適切な形に仕上げて表示させるという風に使用する。
563 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:28:39 ] XML なら素直に既存の XML parser 使うだろ、普通。
564 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:31:52 ] >>563 じゃ、解説して! もう疲れてきた。適切な例を考えるのめんどい。
565 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:35:32 ] すまんが>>514 が悪あがきしているようにしか見えない。>>564
566 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:37:47 ] >>514 じゃないからw むしろ>>553 だろ おれはちゃんと>>557 を書いて説明した。>>514 と言われるのは心外だ。
567 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:47:41 ] >>566 すまん。疑心暗鬼になってて。
568 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 12:00:36 ] lex&yacc⇔flex&bison
569 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 12:27:02 ] Obj-C 以外の話題で盛りあがるのはやめようよ ... 夏休みだから仕方がないのかな。
570 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 13:18:46 ] >>569 >夏休みだから仕方がないのかな。 >>495 にあるように、この流れは君の嘘が元凶だったんだから反省してくれ
571 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 14:40:24 ] 個人的にはOregKit意外にもCocoaOniguruma軽くて良い感じ。
572 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 00:32:36 ] >>495 にあげられてるのが全部同じ人だってのはどうしてわかったの? もしかしてスーパーハッカー?
573 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 12:24:43 ] 単に嘘ついてるのを並べ得たんじゃね 語録としてまとめるのは変だが
574 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 23:08:37 ] char* としての文字列の操作をしらなくても簡単な Cocoa プログラムは書けるというのは嘘ではないのでは ... Apple としては C で書くときでも char* じゃなくて CFString つかってくれということだよね。
575 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 05:24:39 ] >Apple としては C で書くときでも char* じゃなくて CFString つかってくれということだよね。 はぁ?ばかじゃねぇの?
576 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 08:44:13 ] >はぁ?ばかじゃねぇの? 煽り煽られたいだけじゃなくて、ほんとにそう思ってるなら、 BSD の API じゃなくて Apple 製の C API で、 char* を受け取るものがどういうのがあるか反省してみてください
577 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:28:05 ] stringWithCString?
578 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:47:18 ] >>577 それを使うと"default encoding"が変わったときに 文字化けして死亡するので、使わないでね。というか deprecated in 10.4. stringWithCString:encoding: か stringWithUTF8String: を使ってください。お願いだから。 これだけのせいで動かない海外製のフリーウェアに何度も出会っているので ...
579 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:54:16 ] 典型的には、OS X の日本語環境では MacJapanese が "default encoding" で、 こいつは円記号とバックスラッシュを区別するので、 海外製の Cocoa でつくったシェルスクリプトのラッパで 不用意に -stringWIthCString: と -cString で行ったり来たりすると シェルスクリプト内に ASCII code でのバックスラッシュ(0x5c)が あるべきところにMacJapanese の バックスラッシュ (0x80) が入って スクリプトが動かなくなったりします ...
580 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 19:55:33 ] >>574 , >>576 オマエの妄想をAppleが言ってるように言うな、この詐欺師が
581 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 21:01:18 ] でたでた
582 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 21:24:17 ] >>574 char* としての文字列の操作すら知らなかったら、ほんとに簡単なプログラムしか書けない、というのは嘘ではないよ。
583 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:09:04 ] >char* としての文字列の操作すら知らなかったら、ほんとに簡単なプログラムしか書けない、というのは嘘ではないよ。 まあそれはそうですね。 NSString のメソッドって一杯あるけどなんか微妙に足りないことがしばしば。 Perl/Ruby/Python みたいに 正規表現が標準でつかえればそんな問題もなくなるんだけど。
584 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:29:01 ] ねぇねぇ、なんでいきなりchar*を受け取る「API」の話になるの?このスレ。。 それともわざとか? 釣られた俺?
585 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:30:01 ] >>583 >Perl/Ruby/Python みたいに >正規表現が標準でつかえればそんな問題もなくなるんだけど。 この人、また来てるのね。正規表現廚。
586 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:46:52 ] >>584 char*を入力したり出力したりするAPIが存在しなければ、char*を使う必要がない。と言いたいんじゃないの?
587 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 06:28:52 ] 「char*を受け取るAPI」と「正規表現」にこだわる思考回路が理解できない件www
588 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 09:00:50 ] 反抗期なんだろ。
589 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 09:12:03 ] ていうか普通 NSString なんか使わないだろ
590 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:16:41 ] >>574 >>576 >>578 >>579 >>583
591 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 17:08:20 ] NSString NSAutoString NSCString NSIString NSMutableString NSAttributedString ・・・
592 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 20:07:49 ] Netscapeですか
593 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 07:19:51 ] Netscape NetSTEP NeXTSTEP NeXTscape ・・・
594 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 08:21:40 ] ソープのゴム無し
595 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 09:41:26 ] バカ専用 普通 ハッカー ウィザード ┝ - - - - ┿━━━┿━━━┥ ∩___∩ /) | ノ ヽ ( i ))) / ● ● | / / | ( _●_) |ノ / 今はここら辺クマーー!! 彡、 |∪| ,/ / ヽノ /
596 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 20:44:47 ] ゴメンずれてる
597 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 12:45:31 ] バカ専用 普通 ハッカー ウィザード ┝ - - - - ┿━━━┿━━━┥ ∩___∩ /) | ノ ヽ ( i ))) / ● ● | / / | ( _●_) |ノ / 今はここら辺クマーー!! 彡、 |∪| ,/ / ヽノ /
598 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 17:39:05 ] ごめんずれてる
599 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 21:48:06 ] 普通 まったり 超まったり dat落ち寸前 ┝ - - - - ┿━━━━┿━━━━━┥ ∩___∩ /)
600 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 19:06:09 ] "\psage"
601 名前:sage [2008/08/20(水) 10:31:33 ] sage
602 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 05:21:02 ] すみません。教えてください。 a = [foo bar_A:[s get] B:[s get]]; というステートメントがありまして、いろいろ実験してみますと、 どうもB:[s get]がA:[s get]より先に実行されてるっぽいです。 どうしてなのか知りたいのですが。
603 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 06:02:59 ] 引数の評価の順番って保証されてたっけ? というか普通は保証されないから理由なんてないと思うよ
604 名前:602 mailto:sage [2008/08/21(木) 08:31:49 ] >>603 わかりました。ありがとう!
605 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 17:35:38 ] 関数の引数をスタックに積んで渡す場合に逆順に積むと、 呼ばれた側で先頭から配列のようにアクセスできて楽だから。
606 名前:デフォルトの名無しさん [2008/08/22(金) 23:33:22 ] >>605 それでいくと、IntelとPowerPCで動作が変わるのかな?
607 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 00:28:29 ] エンディアンは関係ないから・・・
608 名前:デフォルトの名無しさん [2008/08/23(土) 03:40:36 ] PowerPCは引数をスタックに積まない。多くの場合は。 その前に、gccは実行効率優先でコードを生成するだろうから、引数のセットアップ順序もケースバイケースになりそうな気がする。 push命令使ってるわけでもないし
609 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 05:04:57 ] >>608 恥ずかし過ぎて、俺なら明日会社休んじゃう
610 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 05:30:37 ] >>609 土曜は休みだろ?
611 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 05:38:19 ] 俺は仕事だけどな。
612 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 15:23:24 ] ttp://developer.apple.com/documentation/DeveloperTools/Conceptual/LowLevelABI/Introduction.html
613 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:10:01 ] この数レスに腹抱えて笑ってもた
614 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:28:21 ] あなたつかれてるのよ…
615 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 03:11:51 ] 伝統的なアレだと、C式は後ろから積んで戻ってから呼び出し側がポップ。 Pascal式は前から積んで呼ばれた先でポップだった。
616 名前:デフォルトの名無しさん [2008/08/30(土) 13:55:06 ] ttp://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-8.c?view=markup よくわからん
617 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 15:59:01 ] 「nul」を「にるぽ」と呼ぶスレ
618 名前:デフォルトの名無しさん [2008/09/08(月) 19:07:19 ] >>617 nil じゃね?
619 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 19:19:35 ] うふふ。すごくにるにるしてるわヨ。
620 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:47:58 ] ににる にる にる ににるに〜 ににる にる にる ににるに〜
621 名前:デフォルトの名無しさん [2008/09/09(火) 21:15:37 ] なあ、もうちょっとまじめにやらないか?
622 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 22:32:50 ] 3時間後の発表でiPod全機種のOSがiPhoneに移行したらObjective-Cの仕事が激増するかな。 ローコストモデルでは通信できない可能性が高いからプログラマとしては魅力ないのかな? もっともNDAがあるから職業プログラマは話せないと思うけど
623 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 22:52:44 ] iPhoneでファイルの読み書きってどうすんの? NSDataオブジェクト作ってwriteToFileすりゃいいってのはなんとなくわかるんだけど…。
624 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 02:39:39 ] GNUStep の AppKit っていつから LGPL になったの? 以前は GPL だった気がするけど、勘違いかな...
625 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 20:58:09 ] まあ、LGPLのほうが使いやすいからいいじゃん
626 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 15:07:40 ] Unicodeで \u3042\u3044\u3046 とエスケープされた文字を あいう と変換する方法をご教示ください。
627 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 22:21:26 ] 初心者です。 cocoaはmvcによって アプリを開発していくことはよく分かりました。 ただIBで作成したNSViewに直接modelで作成したクラスを割り当てると この場合controllerを解しているわけではないですよね? そういう解釈で良いんですか?
628 名前:627 mailto:sage [2008/09/27(土) 22:23:12 ] >modelで作成したクラス・・・ というよりxcodeで記述したクラスといったほうがいいのかな?
629 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 23:12:46 ] どんなクラスか知らんけど 通常、1クラスしか使わない場合、 ないのはモデルということになる。
630 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:50:56 ] Unicodeで ¥u3042¥u3044¥u3046 とエスケープされた文字を あいう と変換する方法をご教示ください。
631 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:53:18 ] どっかで見たな
632 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 04:47:43 ] >>631 ちょっと上でみたよね
633 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 05:09:33 ] ごめん。俺あんまりわかんないけど NSLog(@"¥u3042"); // u の前は半角の¥(円マーク) これだとそのまんまコンソール出力されたけど NSLog(@"¥u3042"); // u の前は半角の\(バックスラッシュ) だと、普通に”あ”って出力されたよ。 Unicodeエスケープとかでググれば何か出るんじゃない? 英語で検索した情報多いかもね。
634 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:14:05 ] ポリモーフィズムを実現するに スーパークラスもサブクラスも 関係ない id型ひとつあればよい
635 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:26:29 ] 普段はゆるーくメッセージング、性能が気になるところはCの関数呼び出し。 Obj-CがあればC++要らんっていうのも分かる。
636 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 08:31:31 ] この前本屋いったら、UNIXナントカっていう雑誌の特集がObjCだった
637 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 09:06:13 ] >>636 UNIX magazine の10月号かな
638 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:20:26 ] わかんないけど、季刊誌だったような
639 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:31:37 ] UNIX magazine 2008年10月号 MacからiPhoneまでを網羅するアップルの開発言語Objective-C入——前編 www.ascii.co.jp/books/magazines/unix.shtml
640 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:11:30 ] Objective-Pascal Object C
641 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:53:27 ] 買おうと思ったら1500円したので帰ってきた
642 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:55:08 ] 季刊だったのでやっぱ買いに行くことにした
643 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 20:59:23 ] お店閉まってた><
644 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 15:28:24 ] 買ってきた。 冷静に考えると、2冊分の金で 専門誌買えばよかったかもしれない。
645 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 16:54:44 ] >>644 読む価値ある?
646 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 16:58:32 ] 前編ってことは1月号でも特集やるのか?
647 名前:デフォルトの名無しさん [2008/10/06(月) 18:16:03 ] 萩原本でいいと思う。
648 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 19:32:01 ] >>644 言おうと思ったけど黙っていたのに気づいてしまったか
649 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 19:47:03 ] 立ち読みしてきたんだが、「モダンシンタックス」って何?
650 名前:デフォルトの名無しさん [2008/10/06(月) 20:40:16 ] そりゃおまえ現代文法だろ
651 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 23:25:39 ] NSViewってコントローラー無くても四角形とか描写できるよね。 あれはなんで? コード見ても描写を担う関数が仮引数とか受け取ってるみたいだけど・・・・・・・。 一体この仮引数はなんなの?
652 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 23:52:57 ] >>651 何を引き受けているのかってことかな? 確かにNSViewって不思議。 他のオブジェクトだったらIBとXcodeはアウトレット、アクションとコントラーを介して つながっているけど、NSViewってクラスでそのままリンクさせることができるもんね。
653 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:29:12 ] >>652 確かにcocoaで良くわからないところだった。 NSTextViewでもコントローラーをソースとして登録しておくって考え方も .net出身者としては腑に落ちなかった。
654 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 09:03:01 ] そのあたりはいくらでも説明しますが、 何が疑問なのか曖昧すぎてわからないので、もうちょっと詳しく書いてくれませんか? >>651 さんとかどの関数の話をしてるの? >>652 はなにがいいたい?クラスでそのままリンクって? >>653 はどういうこと?コントローラをソースとして?ソースって何?
655 名前:651-652 mailto:sage [2008/10/10(金) 14:21:46 ] >>654 ドモ、ありがとうございます。超初心者です。 このサイトにあるGraphic関数です homepage.mac.com/mkino2/cocoaProg/AppKit/GraphicFunctions/GraphicFunctions.html#overview 疑問1 このサイトで四角形を描写させるためのサンプル全ての関数において NSFrame型のframeRectっていう仮引数をうけとっているよね。 でも関数の中身をみるとそんな仮引数を利用している形跡がない。 別に宣言する必要が無いのでは?というのが最初の疑問。 疑問2 サンプルコードをダウンロードしたプログラムにはコントローラー(青色の立体箱)がなかったんですよね。 僕はIBで作成したインターフェイス部分とX-codeで記述したコード部分を繋ぐためには コントローラーでアクションとアウトレットで接続する必要があるって理解していたから コントローラーがなくてなんでX-codeで記述した関数がインターフェイスに反映されるのか全く分かりませんでした。 そしたらこのサンプルではIBのNSViewのクラス名部分がX-codeで作成したクラスに なっていたんです。 これはコントローラーが介在していないってことですよね。?
656 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 15:18:45 ] >>655 NSViewのサブクラスは -drawRect:(NSRect)frame;をオーバーライドして描画をやります。 で frameにはview自身の大きさが入ってきます。 ので、それに習っただけでしょう。 DLしてないけど、多分NSViewのサブクラスがwindowに貼り付けてませんでしたか? 最後の段からすると多分そうなってるんだと思うけど、 そうしておくと、nibロード時にサブクラスを作ってそこに貼り付けてくれます。 (実際には違いますがイメージはそんな感じです) で、NSViewのサブクラスの -drawRect:(NSRect)frame; で描画処理が行われているはずです。
657 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 15:20:24 ] コントローラはデータを扱うクラスですので、データを使ってなければ不要です。
658 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 15:53:59 ] >654じゃないですが、こんな感じじゃないでしょうか。 答え1 - (void)drawRect: (NSRect)frameRect は nib (xib) が読み込まれて初期化する 時や絵を書き直す過程で呼ばれる。frameRect は描画する場所を限定する為のもの。 描画効率upの為に customView の一部に限定する事もできる。初期化の時は多分、 customView.bounds で view の全体を描画させているんだと思うな。 答え2 コントローラは介在していない。ていうか、MVC の View を直接いじっていて、 Model、Controller が無い状態。 と、書いているうちに >656 さんが書いてくれましたね。customView が直接 window に 貼付けられていました。
659 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 20:40:38 ] >>653 > .net出身者としては腑に落ちなかった。 そこがCocoa(MVCパターン)と.NET(n層パターン)のアーキテクチャの違いというやつだ。 MVCのViewは、主に描画だけを行いデータの保持や管理をしない。Model内でデータを更新すると、それに連動してるViewが勝手に再描画される感じ。 n層パターンだと、ビジネス層で処理したデータをプレゼン層に送りこんで、プレゼン層側でデータを保持したり処理したりする。
660 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 01:07:34 ] >>639 書いてるのはシロタンですぞw retain count方式の説明に微妙に誤解を招きそうな表現があった気がした。
661 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 11:50:01 ] >>656-658 イメージとしては理解できました。 本当にありがとうございます。
662 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:32:59 ] 10.5以降にはNSViewControllerがある
663 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 22:59:05 ] x-codeで開いたソースファイルの文字を大きくしたいんだけど、 やりかた知ってますか? 一応必死に探したんだけど見つかりませんでした。
664 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 00:07:56 ] 環境設定 -> フォントとカラー
665 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 02:22:42 ] >>663 >>664 の場所にあるよ。 フォントサイズのみの指定って感じのインターフェイスじゃないからわかりにくいっちゃあわかりにくい。 フォント名をダブルクリックしてフォントパネルの中で指定。
666 名前:663 mailto:sage [2008/10/22(水) 20:35:04 ] >>664-665 ありがとう! フォントサイズをこんなにも決め細やかに設定できるなんてすばらしすぎる。 背景もモダンにして高級感たっぷり。 ありがとう!
667 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:51:10 ] >>659 なるほど。 だから .NETではインターフェイスに入力したデータがコードにも受け継がれるけど、 cocoaの場合はインターフェイスに入力したデータはコードでは受け継がれずに 関数で取りに行く必要があるのか。 めんどくさいよね。これ。
668 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:53:40 ] >>667 つまり textBoxの値をlabelに反映するだけのアプリケーションで説明すると .netの場合 labe.text = textBox.text; で終了。 cocoaの場合 labeField = [NSTextview setStringValue : textField]; さらにIBでlabelField,textFieldをアウトレットでコネクトする必要あり。 面毒せー! でも高度なテクニックはcocoaのほうが分かりやすいんだよなー
669 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:56:19 ] なんでも関数にするからだめなんだよ。 .netはcocoaを見習いようがないけど、cocoaは.netを見習えるような気がする。
670 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:36:30 ] BaseTenがダウンロードできないんだけど・・・・・なんで?
671 名前:デフォルトの名無しさん mailto:age [2008/10/27(月) 23:53:43 ] 頭わる…晒しage
672 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 00:02:21 ] かかって来い!
673 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 00:52:53 ] >>668 >cocoaの場合 >labeField = [NSTextview setStringValue : textField]; >さらにIBでlabelField,textFieldをアウトレットでコネクトする必要あり。 何年前の話をしてるんだ? 10.3 のときから、そんなのはコードを一行も書かなくても Interface Builder でバインディングをすればできるわけだが ... developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaBindings/ とかみろ。もっと新しい英語版はこちら: developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/CocoaBindings.html
674 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 01:02:43 ] >>673 ありがとー 実は入門書しか読んでねー。
675 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 23:21:44 ] もうちょっと活発に議論してほしい・・・・・・。 そこでバインディングについて簡単に説明して。 一体どんなすごいことが出来るの?
676 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:01:21 ] バインディングは議論するほどたいしたことじゃないし、 最近 Cocoa やってるひとなら常識だから。 View と Controller 間の glue >.netの場合 >labe.text = textBox.text; >cocoaの場合 >[labeField setStringValue : [textField stringValue]]; を書かなくてよくなるだけです。 インターフェースビルダーで、各 UI 要素が controller のどの変数を 監視/設定するかを設定出来るという機能です。(それだけじゃないけど。) 一番簡単な例は、controller に a という変数を用意して、 label も textfield も a を監視するように設定できます。 そうすると、textfield の内容が変更されると、自動で a が変更されて、 それに伴ってそれを監視している label も自動で変更されると。 別に凄いことじゃないです。 >>673 に引用されてる先を読んでください。
677 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:02:41 ] 書きわすれましたが、 .net でも WPF だったか XAML だったかで同様のことができるんじゃなかったっけ。
678 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:52:23 ] 週刊アスキーを読ませてもらった、大金持ちになりたいです。
679 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 02:11:38 ] >>675 outletを用意しなくても済むため、コード量を劇的に減らすことができるって、HMDTさんが言ってた。 developer.apple.com/jp/documentation/Cocoa/Seminar/Cocoa3/1.CocoaBinding.mov
680 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 23:06:49 ] >.netの場合 >labe.text = textBox.text; >cocoaの場合 >[labeField setStringValue : [textField stringValue]]; いちおう、cocoaでも labeField.stringValue = textField.stringValue; と書ける。objc2.0なら
681 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 23:37:41 ] 明示的にプロパティじゃない setter をプロパティ構文つかうのは Apple 的には推奨してるんだっけ? developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_2_section_3.html anObject.retain はするなとかいてあるが .stringValue はいいのかな。
682 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 16:53:15 ] >>681 その文書を読む限り推奨も否定もしてないようですね。 ただ、書いてる内容を総合的に見れば、ドット構文を一般的なメソッド呼び出しの代替えとして使うな、ということのようだから、ちゃんとしたアクセッサメソッドならドット構文を使ってもいいんじゃないかな。 とりあえず、コンパイルエラーとかも出ないし。
683 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:31:54 ] ボタンを押したらピコーンて音声ファイルが再生されるようにしたいんですけど なんて書けば良いんでしょうか・・。超低レベル質問なのは分かってるんですけども
684 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:34:21 ] >>683 AppleのドキュメントとかAPIリファレンスとかでそれっぽいとこ探せばいいのでは? そこで分かったそれらしいクラス名なりメソッド名とかを使ってググるとか。 APIリファレンスとかにはそのメソッドとかを使ったAppleのサンプルへのリンクがあったりするからそれを見てみるとか。 ClashLandingってAppleのサンプルにそれっぽいのがあるらしい。 [オーディオ] - iPhoneアプリケーション開発 d.hatena.ne.jp/iphone_dev/searchdiary?word=%2a%5b%a5%aa%a1%bc%a5%c7%a5%a3%a5%aa%5d 試してみるとか? 俺も再生の仕方とかわからない・すまない。 他に詳しい方おしえてあげてください。
685 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 03:39:08 ] >>683 質問するスレはCocoa はさっぱり pc11.2ch.net/test/read.cgi/mac/1224960170/ のほうが適当だとおもいますよ。 あと、質問するときはどのていどまで Cocoa を知ってるのか書いてください。 Interface Builder つかってボタンを表示する方法はしってるのかとか。 ではあちらのスレで会いましょう。
686 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:01:44 ] >>684 ありがとうございますとりあえず音は出せるようになりました! 半日かかりましたけどw >>685 見落としてました。そのスレが自分向きですね 教えて君にならないよう頑張ってみます
687 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:01:52 ] ttp://blog-imgs-40.fc2.com/n/e/t/netamichelin/2008110206.jpg
688 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 02:19:43 ] NSTimerのscheduledTimerWithTimeInterval:target:selector:userInfo:repeats: 関数を使って一定間隔ごとにある関数を呼び出すタイマークラスを作成したいのですが、 上手くいきません。 targetに問題があるのかなと考えているのですが、 メイン関数でタイマークラスを作成し上記の関数をよび出す場合、 targetはselfでいいのでしょうか?
689 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 09:11:25 ] 僕らは超能力者じゃないんだからもうちょっと詳しく書いてもらわないとわかりません。 main 関数ってほんとに C の main() ? それだと NSTimer うごかないよ。Runloop 回さないと。 あと、この質問は Objective-C プロパーというより たぶん Cocoa の話なので、>>685 にもあるように 新マック板の Cocoa スレに行ってください。
690 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 09:25:56 ] >>688 おそらく NSTimer はちゃんと出来ているけど、NSRunLoop に渡してないだけな気が しますが…… NSRunLoop の addTimer:forMode: を参照
691 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/11/17(月) 04:06:06 ] Objective-Cで定数って普通どうやって定義するのかな? Javaみたいに、関係あるクラスの中で定義して、AClass.CONST_A_VALみたいに使いたいんだが。
692 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:42:09 ] できません。 Global namespace に大量に定数を定義するのが Obj-C 流。 (あまりいいことではないとおもうけど、そういうものなんだからしかたがない。) そのかわり定数の名前がかなり(めちゃくちゃ)長くして衝突をさけます。 NSUTF8StringEncoding とか NSApplicationDidUnhideNotification とか。 Java なら NSApplication.DidUnhideNofitication とかするところを 点を一個抜く感じだと思います。
693 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/11/17(月) 05:02:17 ] >>692 うう、そうですか。 それがObjective-C流ならしかたない(泣。 defineとconstではどっちの方がいいんでしょう?
694 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 05:38:41 ] う〜ん、普通は .h では const extern にしておいて、 .m で実際の値を定義するんじゃないですかね? 少なくとも Cocoa の標準ヘッダではそうなってますし僕もそうします。 Obj-C というか C だと const の中身までヘッダにかくと リンク時に衝突するとおもいます。ご存知なら失礼。
695 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/11/17(月) 10:45:31 ] >>694 いや、とても参考になりました。 ありがとうございます。
696 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 17:46:29 ] Obj-CからIllustratorドキュメントを操作する場合って直接は無理ですよねぇ… JavaScript書いてそれをObj-Cから実行って感じですか?
697 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:32:39 ] .ai のフォーマットを知ってたら直接操作出来るんじゃない? Mac 上でやるんなら JavaScript だけじゃなくて AppleScript もつかえるでしょう。 Obj-C から AppleScript なら呼び出し放題だけど。 developer.apple.com/documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/
698 名前:696 mailto:sage [2008/11/18(火) 16:10:37 ] JavaScriptでいけた ありがとー
699 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 11:49:45 ] エトワレの 0.4 が出たよ。 etoileos.com/news/archive/2008/11/16/2300/ なんだか独自の方向に突っ走ってる気がするが...
700 名前:デフォルトの名無しさん [2008/12/02(火) 22:43:50 ] >>699 (´・ω・`)ショボーン imepita.jp/20081110/801860 imepita.jp/20081130/027170
701 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 03:22:21 ] Obj-C で visitor pattern ってどうやるのがいいのかな? 上のほうで一度話題になりかけてるんだけど、 なんか急激に煽り煽られになっててよくわからん。 C++ なら HogehogeVisitor* visitor にたいして ループ{ element->accept(visitor) } として、 element の accept メンバ関数で更に visitor->visit(this) となってるわけだけど。ネットの議論をいろいろ読む限り、 Obj-C では単に HogehogeVisitor を追加したくなったところで、 各 element をカテゴリで拡張して @class HogehogeVisitorInfo; @interface/implementation FooElement (HogehogeVisitor) -(void)doHogehoge:(HogehogeVisitorInfo*)hoge; @end @interface/implementation BarElement (HogehogeVisitor) -(void)doHogehoge:(HogehogeVisitorInfo*)hoge; @end としてしまって HogehogeVisitorInfo* visitorInfo=[[HogehogeVisitorInfo alloc] init]; ループ { [element doHogehoge:visitorInfo]; } でいい気がするんですが、もっといい方法ありますか?
702 名前:デフォルトの名無しさん [2008/12/19(金) 19:10:07 ] objective-cってc++みたいにtemplateあるの?
703 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 19:21:55 ] 汎用型の id はあるが基本型は入れらんない。
704 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 06:36:47 ] void CopyVector( double *v1, double *v2 ) { v2[0] = v1[0]; v2[1] = v1[1]; v2[2] = v1[2]; } は、以下だと駄目みたいですがどう書くのでしょう? -(void)copyVector:(double *)v1 To:(double *)v2 { v2[0] = v1[0]; v2[1] = v1[1]; v2[2] = v1[2]; }
705 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 06:55:08 ] -(void)copyVector:(double *)v1 To:(double *)v2 このインスタンスメソッド自体にエラーが生じるの? よければそのエラーの内容も書いてほしいんだけど・・・・・・・ それともただ単に仮引数V2に渡した引数にコピーされていないだけなの?
706 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:23:41 ] インスタンスメソッドだと実体化したオブジェクトに引き渡されるだけで 本の配列には全く関係ないと思うんだよね。 v2のアクセッサメソッドを定義する方法もあるだろうけれど、 クラスメソッドにしてみてもだめ?
707 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:24:44 ] double a[2][3]; a[1][0]=a[1][1]=a[1][2]=1.0; copyVector:a[1] To:a[0]; とすると、copyVector のところに、error: syntax error before 'To' と出てしまいます。
708 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:27:31 ] それはいったい何をやっているの? インスタンスメソッドだよね? ちゃんとオブジェクトに送ってるの?
709 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:30:28 ] +(void)copyVector:(double *)v1 To:(double *)v2 { v2[0] = v1[0]; v2[1] = v1[1]; v2[2] = v1[2]; } ということでしょうか? 結果は同じ様です。
710 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:34:28 ] [self copyVector:a[1] To a[0]]; でどう?
711 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:35:17 ] >>709 てかクラスでもインスタンスメソッドでも オブジェクトにメッセージをおくらないと・・・・・
712 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:40:35 ] copyVector:a[1] To:a[0]; ・・・・・・・・・・そりゃToの前にエラーが出るわな。
713 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:43:14 ] >>710 で解決した様です。この場合のself って何に当たるのでしょう?
714 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:46:15 ] 済みません解説をお願いしますう。>>712
715 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 07:47:15 ] >>714 すみません。 突っ込んどいて解説なしはダメですよね。
716 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 08:18:48 ] copyVector: (ラベルやね、ラベル!) a[1] (配列の要素になんか入れようってか!) (...さあ.代入コイ!代入!...) (ふじこ)To:a[0];
717 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 08:46:20 ] >>716 何といいますか、おっしゃる事がよく分からないのですが。。。
718 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 10:18:41 ] 解説をお願いする前に C と Obj-C の文法をおさらいしたほうがいいと思うんだな
719 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 15:41:56 ] self 知らずに Obj-C のプログラムが書けるわけが無いと思うんだが。
720 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 15:46:57 ] 最優秀Javaプログラマがよく作る グローバルスタティックメソッドライブラリークラス じゃないの?
721 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 18:46:28 ] スーパーサイヤ人にはなれるけど、 空を飛べないサイヤ人みたいだ。
722 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 01:42:16 ] 今おさらい中です。
723 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 02:38:06 ] >>711 が全て。 selfは自分自身だよ。
724 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 02:56:14 ] なんかやっと分かりつつあります。自分て言うのは、そのメソッドを持っているインスタンスということですね。
725 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 11:24:40 ] 人に聞く前に せめて教科書くらいは読んだ方がいいと思うんだよね
726 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 12:15:25 ] Obj-CよりC++勉強した方がいいよって、叔父さんに言われた(´・ω・`)
727 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 15:44:28 ] 叔父さんってどうせIT土方のクソドザだろ?? そんなには13インチのMacBookプレゼントしてやれ。
728 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 22:58:46 ] 両方勉強したって大した事でもない。
729 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 18:45:13 ] おすすめのObj-C入門書教えてけろ 「やさしいC」みたいなのがいいっす
730 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 18:51:31 ] NSString に入っているファイル名なテキストから拡張子を取り除きたいのですが、 対応するメソッドはありますか? 拡張子を取るなら NSString#pathExtension で出来ますが、それ以外の部分が欲しいのです。
731 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 19:14:02 ] >>729 ,730 この手の話・質問はここよりも、新Mac板 Cocoaはさっぱり!!! の方がレスポンス良いよ。 pc11.2ch.net/test/read.cgi/mac/1224960170/ >>729 「やさしいC」は読んでないけど、入門書は 木下誠「たのしいCocoa」、アーロン・ヒレガス「MacOSX Cocoa プログラミング」 >>730 -(NSString *)stringByDeletingPathExtension
732 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 19:22:05 ] >>731 ありがとうございます 「たのしいCocoa」にします
733 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 13:29:54 ] 「やさしいC」は言語の理解に重点を置いた本だから 荻原 剛志「詳解 Objective-C 2.0」 Stephen G. Kochan "Programming in Objective-C" この2冊が該当する。Kochanの本を和訳して欲しいと思っている。
734 名前:730 mailto:sage [2008/12/30(火) 12:26:15 ] >>731 サンクス
735 名前:デフォルトの名無しさん [2008/12/30(火) 12:30:53 ] ObjectiveCってわざわざC言語の拡張にしたから構文がキッタナイキッタナイ この言語の構文は学部生の卒論レベルだぞ まったく整理されてない 企業でやるならもう少し良く考えて作ってほしい
736 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 12:37:51 ] そんなに汚い汚い言うほど派手に拡張されてないし、 言語というよりは動的な環境を提供するライブラリ+呼び出し用マクロって感じだよ。 昔からあるじゃんESQL/Cとか。ああいう系統。
737 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 12:48:11 ] ごめん、C++のほうがキッタナカかったわ まぁ、C言語を拡張した言語ってのはろくなもんじゃないってことで
738 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 12:53:08 ] Obj-C の方が汚いだろ・・・。
739 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 12:56:28 ] Obj-C は拡張じゃなくてハイブリッドじゃないの? まあ、僕も中括弧族の言語は好きくないけど >>735 綺麗だと思う言語教えて
740 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 13:18:30 ] 735じゃないけど、綺麗だなって思うのはPythonくらい。 そもそもSmalltalkの構文が(思想は別にして)美しく感じられない。
741 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 13:27:41 ] 構文が美しいっていうのは、大抵その美しいと言われるところで好みが分かれがちだよね。
742 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 13:43:08 ] まあ、世界の最高級の頭脳が集うアップルの上を行く 735 が 画期的な新言語を発表して、あっという間に世界中に広まるよ
743 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 13:44:58 ] >>739 何が1番きれいかといえば scheme シンプルだしな。 2番目は haskell モナドで一貫性あるプログラミングができる。 3番目は smalltalk でもプログラミング環境や動作環境は最悪最低。遊び専用言語。
744 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 13:45:44 ] >>742 別にそんな最高の頭脳が集まってるわけじゃないと思うぞw 俺だって一応オックスフォード出身だし。
745 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:24:14 ] Obj-C はあのモサイところがいいんじゃないか。 美しさばかり追い求めていてはいかんよ。まだまだ若いな。
746 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 02:17:46 ] >>742 残念ながら、言語が広まるかどうかはマーケティングに大きく依存するんだよ。
747 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 05:30:07 ] アップルはマーケティングだけはうまいはずなのにw 単に中途半端だから普及しないんでしょ。 言語の洗練度ではJavaやらに劣り、速度ではC++に劣り、ここ数年のトレンドのWEB系ではPHPやperlに劣る。
748 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 06:02:26 ] iPhoneは今はまだObjective-Cだけでしょ。 どうせ英語のリファレンスが読めなくて、使いたくても使えないからヒガンでるだけでしょ。
749 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 06:31:10 ] >>748 日本語の解説もでてるっつーの。アップルのサイトとか見ろ。 つーか、そもそも他の言語は英語だけでも普及したけどな。
750 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 10:18:05 ] Javaが洗練されているとかいってるやつは頭がおかしいだろ
751 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 10:36:58 ] まさにマーケティングの効果w
752 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 11:33:32 ] >>747 だったら何でハードもOSもシェアがあんなに少ないんだ?
753 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 11:35:00 ] >>748 Objective-Cが使えるか使えないかなんて低レベルな話はしてないんだよw あんなものチュートリアル読んだら30分で使えるだろ
754 名前:デフォルトの名無しさん [2008/12/31(水) 12:12:59 ] まあ、もっと低レベルな話ならしてるよな。
755 名前:デフォルトの名無しさん [2008/12/31(水) 12:40:42 ] ihoneアプリを開発してるんですが、ObjectiveCで質問があります。 ObjectiveCのクラス内で、C++クラスを宣言したいんですが、include文でエラーが出ます。 どうやらC++クラスファイル内のclass宣言などで構文エラーが出ているようなんですが、 ObjectiveC内でC++クラスを宣言する際にコンパイルオプション等の設定は必要なんでしょうか? どなたかご教授していただけるとありがたいです。
756 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 12:44:34 ] >>747 Objective-CはC言語に変換されるんだからC++より早いか同等のはずだぞw
757 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 12:51:37 ] それはないw
758 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 14:19:13 ] >>755 拡張子をmからmmにする 外してたらスマン
759 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 10:41:46 ] メッセージパッシングしなければCと同等だろうな。 そんなのはObj-Cじゃないけど。
760 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 11:59:59 ] オブジェクト指向では本当のメッセージパッシングは行えないよ。 Erlangのように部品が本当にプロセス(OSのプロセスとは別物)で動いているような言語がオブジェクト指向の進化系だと思うね。
761 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 12:36:32 ] 誰もそんな話はしてない。
762 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 12:55:42 ] つまりだね、Objective-Cはもはや古臭い言語の一つというわけなんだよ
763 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:09:03 ] そらあ、30年以上前の言語を二つ合体させたんだから、古いよな
764 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 15:16:09 ] でもプログラミング言語って意外と新しいから良いっていう感じでもないよね。
765 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 22:03:33 ] >>764 それはマーケティングの効果 あるいはすでに普及している言語から移行のしやすさの効果
766 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 22:04:04 ] 良い悪いが普及しているかしていないかではないんだよ
767 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 22:20:39 ] 移行するメリットだな。
768 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 23:29:03 ] 人が物を買うインセンティブは「より良いもの」よりも「不便」から生まれるらしい。 たしかにC++でどんなプログラムだって書けるから、多少便利になる程度では移行するインセンティブは生まれない。 だからほかの言語に移行するのがめんどくさい。 RubyOnRailsみたいに、使わないと不便になる、という状況が生まれない限り言語の以降はないだろうね。
769 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 20:07:06 ] apple的にMac/iPhone専用言語なんやし、他に広げる意味なんてないと思うが。
770 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 20:17:30 ] >>769 広まることはappleとObjCプログラマの双方に有益だと思うね。 ObjCが広まればObjCプログラマはObjC製だらけのMacOSXを使いたくなるかもしれないし、 ObjCプログラマはMacOSXで培った技術をほかのOSでも活用しやすくなる。
771 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 22:23:25 ] 広まるって自動詞的に書いてるけど、広げる努力しなきゃどんなに良いモンだって広まらんでしょ。 Appleにはそんな事期待できんし、CocoaフレームワークのないObjective-Cなんぞ誰が使うのよ?
772 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 22:49:02 ] そこで Cocotron ですよ www.cocotron.org/
773 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 04:34:06 ] オブジェクト指向な言語とフレームワークを勉強したいのですがOBJECTIVE-CとCOCOAって 適していますか? それともJAVAとかMFCの方がいい?
774 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 04:38:33 ] MFC は設計マズいので適さない。 今更 Java するよりは .NET の方が良い。 Objective-C & Cocoa と .NET のどっちがいいかは OS 次第だろう。
775 名前:755 [2009/01/03(土) 19:12:38 ] >>758 ありがとうございます。mmに変更しいろいろやってみましたが、駄目です。 怪しいところはないと思うんだけど、なんでだろう。。。 どうもコンパイラがC++ではなく、Cのみでコンパイルしているっぽいのですが。 エラー文です。 ----- error: syntax error before 'ClassName' error: syntax error before '{' token error: syntax error before '=' token error: syntax error before '=' token もうC++のクラスを使用するのは、あきらめた方がいいんでしょうか。
776 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 19:56:56 ] >>775 ;を忘れてるとかそういうのじゃないの? アップルの構文解析は糞だから、エラーはあてにならない。
777 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 20:40:04 ] >>775 僕らだってエスパーじゃないんだから、ソースコードをアプロダに貼るとか、最低限の行数まで削ってここに貼るなりしてください。 うちでは以下 #import <Foundation/Foundation.h> @interface Aho:NSObject { int aMember; } -(id)aMethod:(int)baka; @end class Baka { public: int i; }; を aho.mm に保存して gcc -c aho.mm でコンパイルできるよ?
778 名前:デフォルトの名無しさん [2009/01/05(月) 21:36:17 ] 評論家がたくさんいるようだが、そんなにobj-cを修得している椰子がいるとは思えない。 しったかはみっともないぞ。
779 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:51:35 ] 多言語厨なら言語習得ぐらい1時間かそこらでできるだろ
780 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 23:05:01 ] メモリに関するいいサイトってありますか? C 自体の初心者なんですが、dealloc とかしなきゃいけないと思って いたら、そういう事をしていないサンプルばかりで困っています。 一般的な流れとして、どういう感じに alloc して dealloc するのか 知りたいのですが…。
781 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 23:13:59 ] dealloc は自分で呼ばず release を呼ぶ。 あるいは autorelease するか。
782 名前:デフォルトの名無しさん mailto:age [2009/01/07(水) 23:14:37 ] ttp://developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_8_section_2.html 自己レスですが、ここは一応読みました。 でももっとフローが分かりやすい実際のサンプルが見たいんです…。
783 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 23:24:22 ] これ買っとけ ttp://www.amazon.co.jp/dp/4797346809/
784 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:14:17 ] >>780 >dealloc とかしなきゃいけないと思って >いたら、そういう事をしていないサンプルばかり どこにそんなのあるの?
785 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 01:08:29 ] >>784 例えばこのサンプルの中では dealloc という文字は出てこないです。 まぁ必要がないだけかもしれませんが…。 でも IBOutlet 系のクラス変数は dealloc しなくていいのでしょうか? 少なくともヘッダを見ると4つのクラス変数がある様ですが…。 ttp://developer.apple.com/samplecode/InstallerPluginSample/listing3.html
786 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 01:39:51 ] すいませんこりゃまた自己レスですが、IBOutlet 系のものを dealloc したら 元のオブジェクトが破棄されちゃうからしない、って事でしょうか?
787 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 01:47:13 ] 「一応読みました」じゃなくってちゃんと読め。 「dealloc は直接呼び出してはなりません」って書いてあるだろうが。
788 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 01:54:33 ] >>787 何でダメなんでしょうか? では、dealloc はオーバーライドするためだけにあると考えていいでしょうか?
789 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 07:12:40 ] >>788 なぜだと思う? 調べればすぐ分かることは自分で調べろ。
790 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 08:20:18 ] アホすぎて朝からビビった
791 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 10:04:57 ] すんません。Objective-C どころか C 自体が初めてなのでおかしな事も 言っているかもしれません。 直接 dealloc しないのはどこかで retain している可能性があるからって 事でしょうかね。 なんとなく分かって来た気がします。にしても release しているサンプルが あんまりないのが気になりますが…。 dealloc 時に自動的にインスタンス変数も解放してくれないのは仕様ミス の様な気がするんですけどねぇ…。オブジェクトは解放したのにその インスタンス変数だけ確保しておきたい事なんてあるんでしょうか。
792 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 10:11:45 ] >>791 こっちへ移動してください。 pc11.2ch.net/test/read.cgi/mac/1224960170/
793 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 13:09:06 ] つか詳解Objective-C2.0買うなり何なり、 Obj-C関連の ドキュメント を読め。 それともあれか、ソースがドキュメントとかの ドキュメントレスの世界で生きてきたのか? ついでにオーナーシップの仕組みも理解してない内から、 仕様云々ってのは単なる理解の放棄でしかない。
794 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 21:28:26 ] 参照カウンタでググれとしか言いようが無い。
795 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 21:33:39 ] 誘導した人間じゃないんだが、新Mac板Cocoaはさっぱり!!でお預かりしましたので、 引き続きご歓談ください。
796 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 00:28:43 ] >>773 smalltalkが一番向いていると思う。
797 名前:755 [2009/01/09(金) 00:30:43 ] >>774 >>775 亀レスで申し訳ないですが、事故解決しました。 どうやらheaderファイルを使用してそちらにC++クラス宣言を書いていたのが原因のようです。 C++クラスだけ.mmファイル内で宣言するようにしたらコンパイルできました。 ありがとうございました。
798 名前:デフォルトの名無しさん [2009/01/13(火) 18:05:29 ] ↑↑馬鹿だろ
799 名前:デフォルトの名無しさん [2009/01/17(土) 20:50:45 ] 799
800 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 20:51:19 ] 800
801 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:47:52 ] 矢追
802 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 17:22:07 ] ”NSKVONotifying_....”というクラスについて質問です。 MyObject というクラスを作って + initialize を埋めました。そしたら、子クラスが無いに も関わらず、initialize が2回呼ばれました。変だなと思い、中で NSLog(@"%@", self) を やると、”MyObject" と"NSKVONotifiying_MyObject" が出てきたんです。MyObject は KVO を使っているので、勝手に作られた子クラスと思われますが、これって何ですかね?
803 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 23:34:23 ] >>802 KVO は実装するために、Cocoa の runtime が Objective-C の runtime を駆使して別個のクラスを動的につくって入れ替えて... とやってます。 "isa swizzling" とか呼ばれます。ググって勉強してみてください。
804 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 08:29:17 ] ちょうど解説があったよ。 www.mikeash.com/?page=pyblog/friday-qa-2009-01-23.html
805 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 17:14:50 ] ありがとう。勉強してみます。
806 名前:デフォルトの名無しさん [2009/01/25(日) 22:33:33 ] iPhoneの低層のAPIを使って動画プレーヤー作りたい. vlc-4-iphoneとかで使われてるcore_surfaceクラスとか使いたいがヘッダとか見当たらんのだけど,DSOとかで使えるようになったりするもん?
807 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 20:45:58 ] 最近、Cocoaプログラミング始めた初心者です。 特定のTextFieldにフォーカスが移った時に、 半角英数入力に強制的に替えるにはどうすればいいですか?
808 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:54:49 ] >>807 pc11.2ch.net/test/read.cgi/mac/1231853172/ こっちで再度質問して。
809 名前:jP [2009/02/01(日) 20:02:11 ] 最近Mac向け開発を始めたんだけど、手順がよくわからん。 javaとかCと違って、インタフェースとコードが分かれてるから感覚がつかめないんだよね。 だれか、C/javaからobjective-C始めた人っている? その辺を話したいんだけどなぁ。(ここに書くようなことじゃなかっから、ごめんちゃい)
810 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:13:07 ] むしろ大半がそうじゃね
811 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:20:37 ] ごめん俺AppleScript → ObjCだわ
812 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:24:24 ] 俺なんかなでしこ→AppleScript→Objective-C(移行中)だぞw
813 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:37:45 ] Java→Objective-Cだけど呼んだ? つかJava分かるならObjective-Cなんかすぐ分かると思うんだがなぁ。 勉強しなきゃいけない分量で言ったらJavaの1/3くらいじゃなかろうか。
814 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 21:40:44 ] 気味の悪い文法が障害
815 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:41:34 ] 文法はどうでもいいんだけど、 MSのダブルクリック&コードとn層データ構造に慣れてたから CocoaのMVCには結構馴染みにくかったな。 あ、あとVSのIntelisenceに慣れてたからXcodeも面倒くさかった。 まぁ慣れだな。
816 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:46:42 ] >>809 既にプログラミングやったことあるなら、ADCのObjective-Cプログラミング言語とかCocoa基礎ガイドとか読めばいいと思うよ。
817 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:53:31 ] gccの-fobjc-direct-dispatchってもしかして メソッドの実装を直接呼び出してくれるの?
818 名前:デフォルトの名無しさん [2009/02/02(月) 03:10:32 ] objective-cを使ってアプリを作れるようになるには、何をすれば良いですか? cocoaプログラミングの本は読みました。 例えば、Cの関数を覚えるとか、何かあったら教えてください。
819 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 03:25:06 ] >>818 釣れますか?
820 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 07:44:55 ] >>815 ダブルクリック&コードにかんしては dotnetaddict.dotnetdevelopersjournal.com/dcacs.htm のひとが面白い分析をしてるなとおもった。 まあこのひとは .Net から Obj-C に半分ぐらい転向したひとなので、 無理に弁護してる感もなきにしもあらずなのだが...
821 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 07:50:37 ] >>817 >gccの-fobjc-direct-dispatchってもしかして >メソッドの実装を直接呼び出してくれるの? そんなことしたら Obj-C の良さが台無しだろう。 それは objc_msgSend を呼び出すのが速くなる最適化です。 メソッドの実装が欲しければ Obj-C のランタイムつかってとってこれます。 五年前の msgSend の実装 を解析したのが www.mulle-kybernetik.com/artikel/Optimization/opti-9.html にあります。最近はもっと最適化進んでるんでしょうが。
822 名前:デフォルトの名無しさん [2009/02/02(月) 23:45:10 ] >>809 Cocoaアプリ開発って極端な話XCodeで新規プロジェクトを選んだ時点で 完成してるんだよね。だからコード書かなくても動く。 サブクラスで必要な部分だけどんどん拡張していける。 CarbonやWin32って1から全部書かないといけないんだよね。 Cocoaアプリ開発=Cocoaフレームワークの拡張かな。
823 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:14:27 ] というか、C / Java だって、大昔アセンブラつかってたひとからすれば、 レジスタをいじらなくても動くなんてよく判らん、とか、 自分で vram を叩かなくても文字が表示される、どうなってるんだ、 とかだったはずで、単に慣れの問題だとおもう。 徐々にシステム側が沢山の部分をやってくれるわけでさ。
824 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:27:52 ] >>821 レスどうも。リンク先面白かったです。 ObjCのメソッド呼び出しが遅いとかなんとか 読んだ記憶がありましたので、もしかしたらと。 にしても、ObjC動的すぎて素敵。 いや、むしろ変態。
825 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:26:04 ] Cはアセンブラとあまり変わらない感覚だったよ。 特に68系の場合はアセンブラもわりと高級言語っぽかったから、 コンパイルしたらどういうコードになるか容易に想像ついた。
826 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 06:20:08 ] >>814 > 気味の悪い文法が障害 smalltalk一回経験してるとそうでもないんだけどね c++に慣れてると目が点になるかもしれん
827 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 08:14:20 ] 822みたいな奴を見ると、Mac使ってることが嫌になる
828 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 08:06:40 ] マク関係はどうもスルー力が試される機会が多いんだよな
829 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:31:49 ] >>814 気味の悪い文法が障害 CやJavaやPHPやってるんだが、始めて2日でむしろ気持ち良くなってきたんだが。
830 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 08:33:34 ] 自然にコメントを大量につけてることになるのがいいよね。 自分でつくるクラスのメソッド名もならって読んで意味のわかる英語になるようにしてる。 これだけで数ヶ月後にコードを見直したときの理解度が全然違うベ。
831 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 12:30:15 ] >>829 俺も大分気持ち良くなって来ました。
832 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 16:13:30 ] [Meta2ch agreeTo:829 with:"passion" ]
833 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:09:21 ] WindowsがF#に移行しつつあるのにobj-c2.0ぐらいの文法で障害とか どんだけ池沼なんだよw
834 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:14:22 ] >>833 >WindowsがF#に移行しつつある まあ一般化はあと5年は先だろうな。
835 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:44:28 ] iPhone デベロッパーズ クックブック もうすぐ出るね。 www.amazon.co.jp/dp/4797352418/
836 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 20:56:13 ] >>833 Windows、F#に移行しつつあんの? 最新版VSで辛うじてサポート程度としかしらんかったわ。
837 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:43:58 ] C# <= C++ J# <= Java F# <= Fortran??
838 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 22:37:06 ] Functional Language
839 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 15:42:45 ] F#は、Objective Camlだよ。 研究とか趣味の人向けの選択肢であって、大多数のプログラマには無縁の存在だから。
840 名前:デフォルトの名無しさん [2009/02/18(水) 14:21:32 ] Windows版のGCCにはobjective-cコンパイラも付属してますが、 これを用いて、Windows APIをコールして、簡単なGUIアプリを作成できますか?
841 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:25:00 ] できるはず
842 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 00:33:30 ] Windows API をどうやって Obj-C にくるむかという問題があるのでは... Windows で Cocoa で開発したければ Cocotron www.cocotron.org/ とか GNUStep www.gnu.org/software/gnustep/experience/Windows.html とかあるよ。
843 名前:デフォルトの名無しさん [2009/02/19(木) 03:43:53 ] GNU Step入門 www.amazon.co.jp/gp/offer-listing/4861863007/ なんて本がこっそり出てるんだけど、1ナノセカンドも 話題になってない気がする。
844 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 04:18:22 ] 作者の名前と経歴がなぜか笑えるw そういえばFileMagnetのWindowsクライアントはCocotronで作られたんじゃなかったっけ?
845 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 08:33:44 ] >>842 直接APIをコールすればいいんでねいの?
846 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 21:12:59 ] >>843 なか見検索できないんだが、なかはどうなの?
847 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 21:37:40 ] あったかいナリ
848 名前:デフォルトの名無しさん [2009/02/20(金) 00:54:58 ] >>822 >完成してるんだよね。だからコード書かなくても動く。 おまえプログラム組んだ事ほぼ皆無だろw Interface Builderでコントロールをドラッグ&ドロップしてアプリが完成したつもりになってる輩とみたw そんな作業、アプリ制作の1%程度の作業なんだが。
849 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 02:14:38 ] アホなりw
850 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 12:35:06 ] >>848 まあほぼ同意だが、Interface Builder は何かほかの GUI デザイナとちがって 作業時間が長いようなきがするな... バインディングとかターゲット、outlet とかも一杯で。 ソースコードになってない情報が多すぎてわかりにくいときも。
851 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:30:44 ] NSObjectのカテゴリ作ってperformSelectorを上書きして 呼びだされたメソッド名を逐一NSLogで出力したいんだが、 元のperformSelectorを呼びだす方法ってあるかな? おもしろそうなのに全然使いこなせてない気がする>カテゴリ
852 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 13:46:53 ] カテゴリでは同名のメソッドは追加できない気がする。 journal.mycom.co.jp/column/objc/029/index.html にやりかたがのってますが、Leopard になってすこし runtime がかわったので 10.5 でコンパイルする場合は 10.4 用にインスペクタで設定しないと そのままではコンパイルエラーがでるでしょう。 何にせよその連載は勉強になります。 また、メソッドの呼び出しの際に performSelector: がいつでも呼ばれるか というとそうではないので... developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_13_section_1.html developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/ developer.apple.com/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/ developer.apple.com/documentation/Cocoa/Reference/ObjCRuntimeRef1/ のあたり参照。
853 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 16:03:34 ] >>851 > 呼びだされたメソッド名を逐一NSLogで出力したい それはずばりアスペクト指向の典型的な活用例なんで、素のObjC/Cocoaでは難しい。 journal.mycom.co.jp/column/objc/044/index.html
854 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 03:05:20 ] そういうのは DTrace が得意そうだね >> 呼び出されたメソッドの書き出し
855 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 03:57:43 ] >>854 DTraceはカーネルの呼び出しだけでしょう? ユーザー空間内での やり取りは無感知。
856 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:34:51 ] >>855 そうでもないよ。objc????:: という provider があります。 www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html とか参照。
857 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:37:13 ] >>855 そんな事無いですよ。DTrace 自体はプローブポイントさえあれば、カーネルか ユーザープロセスかは無感知。
858 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:49:31 ] objective-cで、あるパターンの中から文字列を抽出したいと思っています <p class="info"><strong class="number">6</strong>|<strong class="time">3:16</strong>... 上記のような文字列から 6 と 3:16 の部分だけをそれぞれ取得したいのです C#ではSystem.Text.RegularExpressionsのRegexクラスを使用して取得できたのですが、Objective-Cで同様の処理はどのように取得すればいいのでしょうか? ちなみにiPhone上で動かそうと思っています
859 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:14:10 ] >>858 標準の NSScanner つかって頑張ってもいいけど、 個人的には RegEx Kit Lite がおぬぬめ。 regexkit.sourceforge.net/RegexKitLite/
860 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:29:01 ] >> 859 おおおまさにこれです! ありがとうございました
861 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:59:36 ] 質問です。 カテゴリを利用して、(ある1つのクラスの)ソースファイル の分割を行うとします。 クラスAの実装ファイルを、 ファイル1とファイル2に分割、といった具合です。 そのとき、ファイル1で定義、実装されているプライベートメソッドを、 ファイル2で使おうとすると、ビルドのときに警告がでますが、これを なんとかできないものでしょうか。 解決策として、そもそも、同一のプライベートメソッドを利用する メソッド群を分割するな、という考えもあるかと思います。 また、コンパイラの警告レベルの調節でも、できるのかもしれません。 ですが、ほかにいい方法をご存知の方がいればご教示下さると助かります。 もしも、こういうこと(プライベートメソッドの他ファイルでの利用) がプログラミングのマナー違反であれば、ご指摘下さい。
862 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 06:12:25 ] プライベートメソッドをならべたヘッダをひとつつくればいいんでは? ClassAPrivate.h に @interface ClassA (Private) -(id)hoge:(id) ... @end とかしておいて、それを実装ファイルで #import すればいいとおもいます。 Obj-C では@interface ClassA (CategoryX) で宣言したやつの 実装を @implementation ClassA (CategoryX) の中でしないといけないという ルールもないので、自由自在です。
863 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:43:26 ] その方法も頭に浮かんだのですが、ビルドのときに2重定義の警告と なる気がして試してみませんでした。
864 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 17:17:10 ] >>861 分からないので聞くのですが、他から参照したいならなんでプライベートにするのでしょうか?
865 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:31:08 ] 他から、といっても同じクラスなのです。
866 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 22:26:48 ] >>865 なるほど。 どうも私の頭がJAVA脳だったようです。
867 名前:デフォルトの名無しさん [2009/03/07(土) 18:35:46 ] ClassA.hで #import <Cocoa/Cocoa.h> #import "ClassB.h" @interface ClassA : NSObject { ClassB* b; } @end ClassB.hで #import <Cocoa/Cocoa.h> #import "ClassA.h" @interface ClassB : NSObject { ClassA* a; } @end というように、互いにインスタンスを持ち合うとコンパイル時にエラーが出ますが、 ClassA.h内で #import "ClassB.h" @class ClassB; ClassB.h内で #import "ClassA.h" @class ClassA; というふうに@classディレクティブを付けることでエラーが出なくなります。 @class classnameが、classnameがクラスであることを宣言しているのはわかるのですが、 なぜこれをやると、ClassA.h、ClassB.hを互いにimportしているにもかかわらずエラーが出なくなるのでしょうか。 逆に、付けないとなぜエラーになるのでしょうか。 また、@classを付ける基準ですが、 ・そのクラスのスーパークラス ・Cocoa等のフレームワーク内のクラス を除く全てのクラスを使用する時、必ず@classをつけるという考え方で良いのでしょうか。 どなたか詳しくご存知のかたよろしくお願いします。
868 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:01:04 ] >>867 詳しくはないが、自分ならこう考える Objective-Cの背後にある仕組みは結局Cと何もかわらない importは本質ではなくひとつのファイルに連続して次のように書けるかという問題 Cではこう書けない struct A { struct B *b; }; struct B { struct A *a; }; なぜならAの宣言時にBはまだ宣言されていないから。しかしCでは不完全型を定義できて、 struct B; struct A { struct B *b; }; struct B { struct A *a; }; こう書く事ができる。Aの定義時にBは不完全型なのでインスタンスは作れないが、ポインタは作れる。ポインタのサイズはどの構造体でも固定だからだ で、Objective-Cでも背後で同じようなことが起きてるんだと思うよ @class B; として不完全型を定義すればそのポインタを次の行からは使えるようになる だからエラーにならない どう?
869 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:10:43 ] >>867 だから、@classを付ける基準は 相互に依存するクラスを定義しなければならない時、またこのときは@classを書かざるを得ない だけ それ以外は冗長で無駄
870 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:18:21 ] >>868 ありがとうございます。今までずっと悩んでたのですが、すっきりしました。 >>869 特別な場合を除いて不要という形ですか、ありがとうございます。