1 名前:デフォルトの名無しさん [2009/04/15(水) 00:11:00 ] Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。 (Wikipedia:ja.wikipedia.org/wiki/Objective-C より) Objective-C [ObjC part:3]; ttp://pc12.2ch.net/test/read.cgi/tech/1186543111/ Objective-C ttp://pc11.2ch.net/test/read.cgi/tech/1106983092/ Objective-C ttp://pc5.2ch.net/tech/kako/990/990574267.html
610 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 16:37:49 ] わかったある。謝謝
611 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 21:00:38 ] >>609 エ?こうしとけばリークにならねえだろ? -(void)dealloc { ... [mHoge release]; // 0 mHoge = nil; ... [super dealloc]; }
612 名前:デフォルトの名無しさん [2009/12/06(日) 21:02:19 ] そうか?
613 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 21:17:35 ] そのdeallocは何をトリガーにして呼ばれるんだっちゅう
614 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:15:11 ] >>611 だから、>>609 はそうしろって書いてるじゃん
615 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:25:14 ] 自分が 609 だけど、foo が dealloc 時に hoge をリリースするのは、 addHoge: (addSubView:)には retain されてるから当然。 でもそれだと±1で、Hoge alloc init 時のカウント1をリリースされてないから、リークになる。
616 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:44:59 ] まぁ、init時にautoreleaseつけとくのが無難かな
617 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 00:14:08 ] 無難とかそういう問題ではなかろう。
618 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 00:45:02 ] >602 >605 initほげほげ、copyほげほげ は retain されて、 それ以外のメソッドは autorelease されたのが返ってくる。 [obj method:a] としたばあいに、obj が a がずっと必要なら method 内部で retain するし、 いらなかったらそんなことはしない だから、自分があるオブジェクト a を release すべきかどうかは、 自分が呼んだメソッド内でどうなっているかとかは気にしなくてよくて、 単に自分がいらなくなった時点で release すればよい。 まあリリース足りなければメモリ食うだけだけど、 リリースしすぎは一瞬でクラッシュするので、 きちんと理解して書くか、NSZombie でチェックするか、 release しすぎないようにしてください。
619 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 01:19:21 ] ウィーッス
620 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 13:31:55 ] >>618 newほげほげも忘れないであげてください
621 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:53:50 ] 雑談はスレチだよね。チラ裏すまん。 Objective-Cのオブジェクトの所有権ポリシーって、 (C++におけるメモリ管理と)やることは本質的に同じでありつつ 保守効率が格段に上がる優れた機構ではあるとは思うけど、 Objective-Cってどんなもんだろってちょっとイジってオナりたいとき、 一通り理解するまでとっかかりで苦労するねぇ。 C++慣れしてると、余計なお世話に感じてしまうっていうか。 なんだか好きになれない。
622 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:59:43 ] まあ、今はGCがあるし
623 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 20:34:51 ] iPhoneではGCが使えないらしい...ゾ
624 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:15:56 ] Objective-Cのメモリ管理3原則 1. alloc,copy,retain,newしたインスタンスはreleaseする必要あり 2. 1した覚えの無いインスタンスは勝手にrelesaeしてはいけない 3. 1してないインスタンスはどこかでreleaseされるので、保持したい場合はretainかcopy
625 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:28:22 ] add したら直ぐ release して良いのかと思ってたら、そうじゃないんだね
626 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 00:43:52 ] >>621 オブジェクトプール+手動の参照カウントってのは、大昔の手法だよ。 人頼みだとバグが多くなるし、保守効率も下がる。だからメモリ管理コードを 一々書かなくて済むGCやスマートポインタが主流になってる。 模したSmalltalkみたいに最初からGC付きなら無かった機構だから>>622 が正解
627 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 09:22:55 ] でも、iPhoneがGCは無効なんでしょう? ここにいる皆さんは、GC派とリファレンスカウンタ派、どちらが多いのでしょうか?
628 名前:621 mailto:sage [2009/12/08(火) 11:17:45 ] あ、すみません、iPhoneアプリ開発でObjective-C処女喪失したもので。 iPhoneはGC無いです。 (ただ、あったとしてもiPhoneはメモリ極小なので、autoreleaseさえ極力避けるべきと公式で指摘されています。) >>624 の規則だけですが、解れば便利な@propertyと@synthesizeも、 とりあえずちょっとイジってみようレベルの初見だと、 iPhone画面にHelloWorld表示するだけのソースすら、 「@property(nonatomic,retain)何この呪文、この入門書じゃソース解説にも記述無いし、 とりあえず詳細確認は後だな...あれ??実装でretainなんてしてなくね??なんで?? (ポチッ)ちょww動いたwwwけどHelloWorldのソースすらイミフwwww」 みたいな。 結局、入門書はHelloWorldで挫折、とりあえずちょっとイジるだけのつもりが、 公式ドキュメントを片っ端から読み漁って十分理解してから、 入門書のHelloWorldのソースを見直したのはいい思い出。。。 チラ裏に長文、本当にスマンかった。 最後に、InterfaceBuilderについて。 見た目だけでVB.NETくらい優しいお母さん的IDEだろうと思って触ると、火傷するね。
629 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:10:55 ] iPhone だと Hello World 如きに property つかわにゃならん訳?
630 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:16:01 ] >>628 なんの入門書を読んだか知らんが、それはその入門書があきらかに悪いな iPhone でプログラムやるには、 (古めかしいとか批判はいろいろあるかもしれないが、実際問題として) retain/release ができなきゃ話にならない。 わかったつもりで通過すると絶対に意味不明なクラッシュをはじめて あとで泣く羽目になるのに、説明しないなんてありえない。 とにかく変な入門書を掴んで失敗でしたね。 あなたが公式ドキュメント読める人で良かったですが。 あと、Interface Builder はふつうの(?)と違って、 コントロールダブルクリックしてもメソッド追加できないので、 その辺戸惑うかも知れませんが、ビューとコントローラの独立性が 自然に高まるようになってるのはいいところだと思います。 .Net やさんで iPhone プログラムはじめたひとはみんな そう感じるみたいね。 dotnetaddict.dotnetdevelopersjournal.com/dcacs.htm とか。
631 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 18:47:31 ] 今更だけど、 > オープンソースの現状について、おそらくは予想外の知られざる事実を明らかにした。 > 『Smalltalk』対『Objective-C』では? Smalltalk がほぼ3倍のコード量で勝利している。 japan.internet.com/webtech/20090724/12.html オープンソースの括りだから負けただけだよな?
632 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 12:41:07 ] >>629 いらないよ。コードなんて1行も書かなくてもHello Worldって表示するぐらいはできる。 完全に入門書が悪いわ。アップルの配布してるPDFのほうが数倍マシ。
633 名前:デフォルトの名無しさん [2009/12/09(水) 22:34:49 ] NSURLでwww.xxx.com/foo/boo/index.html のようなURLから index.htmlを抜き取るようなメソッドってないですかね? スキームやホスト、アンカーなどを返すメソッドは見つかったのですが、 ファイル名を返すのが見つからないです・・・
634 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:02:12 ] NSString (NSStringPathExtensions) の - (NSString *)lastPathComponent; でも使え。NSPathUtilities.h に定義されてる。
635 名前:デフォルトの名無しさん [2009/12/09(水) 23:13:06 ] >>634 ありがとうございます。 こんな便利なのがあったんですね。 というか、NSURLにもこのメソッドつけてほしいですねw
636 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:14:08 ] 10.6にはついてるみたいよ。
637 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:25:55 ] ほんとだ。 - (NSString *)lastPathComponent AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER;
638 名前:デフォルトの名無しさん [2009/12/14(月) 01:49:22 ] NSStringをURLエンコーディングしたいと考えています。 例えば てすと → %A4%C6%A4%B9%A4%C8 のようにしたいのですが NSString *test = @"てすと"; [test stringByAddingPercentEscapesUsingEncoding:NSShiftJISStringEncoding]; NSLog(test); のようにしても、 8C48B78C6 のように表示されてしまいます。これを%A4%C6%A4%B9%A4%C8のように表示するにはどうすればいいのでしょうか?
639 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:58:22 ] NSLogが%をフォーマット文字と解釈して表示しちゃうせいだから気にしない
640 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:00:28 ] 1. ソースコード内に日本語文字列 @"にほんご" を書かない。 それによって出来た文字列がどうなるかの動作は未定義です! (うまくうごくときもあるかもしれませんが、コンパイラのデフォルト設定が 次のバージョンでかわると一瞬でおかしくなる可能性があります。) 必ず Localizable.strings を使うようにしてください。 2. NSLog(test) というふうに書かない!NSLog の第一引数は フォーマット文字列です。% があるとフォーマット指示だと解釈されます。 NSString* test = @"%@"; NSLog(test); とすると、NSLog は %@ をフォーマットと解釈するために スタック上に偶然あるポインタの先のオブジェクトっぽいものにアクセスして 異常終了しますよ! 必ず NSLog(@"%@", test) としてください。
641 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:02:39 ] NSString *test = @"てすと"; NSLog(@"%@", [test stringByAddingPercentEscapesUsingEncoding:NSShiftJISStringEncoding]); 2009-12-14 02:01:53.361 test[1467:a0f] %82%C4%82%B7%82%C6
642 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:03:33 ] なるほどなるほど、勉強になります。 ちゃんと表記したらちゃんと表示されました。 今まで面倒くさがってNSLog(NSString変数)みたいに書いてましたが 今度からちゃんと書こうと思います。ありがとうございました。
643 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:09:44 ] >>640 いつもの人乙
644 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:20:58 ] >>640 1. だけど、 developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocLanguageSummary.html によると、10.5 からは UTF-16 の文字列も大丈夫って書いてあるよ。 ただ、C のソースコードを何のエンコーディングで保存しているかと、 gcc の -fexec-charset, -finput-charset の設定によるので、 developer.apple.com/mac/library/documentation/DeveloperTools/gcc-4.2.1/gcc/Preprocessor-Options.html 僕は @"にほんご"は怖くて使う気になりませんが。
645 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:24:31 ] >>638 というか URL のエンコーディングって ShiftJIS でいいんだっけ? 最近って真っ当なサイトなら UTF-8 じゃない? Wikipedia とか。
646 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:26:25 ] RFCではUTF-8である"べき"とされているな
647 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 10:11:57 ] 10.5と10.6は、@"にほんご"は普通に使えてるなぁ。 ソースコードはデフォルトのままUTF-8。
648 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:41:01 ] KVC で質問があります。class_addMethod で追加したセッタ、ゲッタが valueForKey: から呼ばれないんですが、なぜでしょう?そういうもの? サンプルコードは以下のとおりです (Obj-C 2 です) #import <Foundation/Foundation.h> #import <objc/runtime.h> @interface Aho:NSObject { } @property(retain) NSString*foo; @end @implementation Aho -(id)getter { NSLog(@"getter:%@",NSStringFromSelector(_cmd)); } -(void)setter:(id)obj { NSLog(@"setter:%@,%@",NSStringFromSelector(_cmd),obj); }
649 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:41:49 ] +(void)synthesizeSetterGetter:(NSString*)getterName { NSString*setterName=[NSString stringWithFormat:@"set%@%@:",[[getterName substringToIndex:1] uppercaseString],[getterName substringFromIndex:1]]; IMP getter=class_getMethodImplementation(self, @selector(getter)); class_addMethod(self, NSSelectorFromString(getterName), getter, "@:"); IMP setter=class_getMethodImplementation(self, @selector(setter:)); class_addMethod(self, NSSelectorFromString(setterName), setter, "@:@"); } +(void)load { [self synthesizeSetterGetter:@"foo"]; } @dynamic foo; @end int main(){ NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init]; Aho*aho=[[Aho alloc] init]; [aho foo]; [aho setFoo:@"bar"]; [aho valueForKey:@"foo"]; // ここで例外がでる [aho setValue:@"bar" forKey:@"foo"]; return 0; }
650 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 02:51:37 ] valueForKey: はまずアクセサを探すはずなのにおかしいね。 @synthesize foo; やって、 method_exchangeImplementations(class_getInstanceMethod(self, @selector(foo)), class_getInstanceMethod(self, @selector(getter))); method_exchangeImplementations(class_getInstanceMethod(self, @selector(setFoo:)), class_getInstanceMethod(self, @selector(setter:))); とかやるとちゃんと機能したけど、それは君の望むことじゃないか。
651 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:25:12 ] class_addMethod(cls, sel, imp, types) の中の、types が間違ってるから。 typese は(リファレンスで確認してね)、"返り値", "self", "_cmd", "引数..." なので、 class_addMethod(self, NSSelectorFromString(getterName), getter, "@@:"); // ×"@:" class_addMethod(self, NSSelectorFromString(setterName), setter, "v@:@"); // ×"@:@" とやると動く。
652 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:38:59 ] ついでに。+load で +synthesizeSetterGetter: を呼ぶとNSAutoreleasePoolがまだ できてないタイミングなので、コンビニエンスコンストラクタを使うとリークする。 setterName = [NSString stringWithFormat:..]; の所。alloc + init + release を 使おう。それか、+load でやる代わりに +initialize で呼ぶとpoolが出来た後なので コンビニエンスコンストラクタが使える。(分かった上でのサンプルならごめんよ)
653 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 11:41:32 ] みなさんありがとうございます、 おかげでうまく行きました。 型のエンコーディングをわかってませんでした。 Pool の件もどうもです。まあ数個ぐらい リークしてもよかんべ という気持ちでしたが、いけませんね。 type encoding は method_getTypeEncoding をつかった方がいいとも 職場で教えてもらいました... マルチポストみたいになってすみません。
654 名前:572 [2009/12/19(土) 15:58:57 ] 質問させてください 中にNSMutableDictionaryのインスタンスを持っている独自クラスがあって その中にどんなキーがあるかは不定です。 でそのインスタンスに対して hoge.foo のようにドットでプロパティを呼び出してNSMutableDictionaryのobjectForKeyにアクセスするようなことって出来ますか? 不定じゃなければそういうプロパティを作ってアクセッサを定義してやればイケそうな気もするけど・・ プロパティはコンパイル時の型チェックがあるのでダメそうな気がするんですが、見逃してることがあったら教えてください。
655 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 16:53:38 ] できます。コンパイル時にウォーニングはどうしてもでるとおもいますが。 a.foo=b は[a setFoo:b] と、 b=a.foo はb=[a foo] と等価なので、 [a foo] をダイナミックに [a objectForKey:@"foo"] にかえてやればいいですが、 それには forwardInvocation: を使えばいいです。 www.mikeash.com/?page=pyblog/friday-qa-2009-03-27-objective-c-message-forwarding.html とか参照。
656 名前:デフォルトの名無しさん [2009/12/20(日) 01:04:58 ] NSStringの中にxxx:yyyみたいな文字列が入ってます。 これからxxx、またはyyyを返すようなメソッドってないでしょうか? xxxの中には:は含まれず、yyyの中には:が含まれている可能性があります。 要するの最初のコロンと、それ以降に文字を分けたいのです。
657 名前:デフォルトの名無しさん [2009/12/20(日) 01:18:01 ] rangeOfRegexとsubstringWithRangeでどうにかしました・・・
658 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:19:11 ] NSScanner でググると良い
659 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 06:50:02 ] >>658 で?
660 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 07:18:18 ] >656-657と>659って同一人物なのか? 俺も普通にNSScannerでがりがりマッチング取ればいいだけ だと思うんだが。
661 名前:デフォルトの名無しさん [2009/12/20(日) 11:48:34 ] >>660 いえ、同一人物じゃないですw 回答くれた人にそんな失礼な返事しないですよw NSScanner使ったことないので、調べてきます。 Objective-Cというかオブジェクティブ志向のプログラミングは初めて間もないんですが、 結構クラス調べるのは楽しいですね。もっといっぱい知りたい・・・
662 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:01:08 ] いいのかい? 俺はノンケでも構わず食っちまう男なんだぜ
663 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:17:39 ] いいよ
664 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:13:00 ] >>661 NSScanner でももちろん出来るけど、その目的ならNSString の -(NSArray*)componentsSeparatedByString:(NSString*)separator でやる方が楽かと。後ろは、NSArray の -(NSArray*)subArrayWithRange:(NSRange)range で取り出して、 -(NSString*)componentsJoinedByString:(NSString*)separator で戻してやればいい。
665 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 22:04:58 ] >>655 メッセージ式で呼び出すときはウォーニングだけで済むと思うけど、プロパティ構文は静的に解決できないとエラーになると思う。だから、プロパティでやるのは無理なんじゃないかな。メッセージ式で書けばいい話だが。
666 名前:654 [2009/12/20(日) 22:36:59 ] >>655 ありがとうございます 遅レスすいません 別のところ(C言語で文字列の置換)でつまっていて、詳しくテストしてない状況です。ウォーニングはでるけどできるってことですね。試してみます。 リンク先も見てみます。ありがとうございます
667 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:46:44 ] キー値コーディングってどんなケースで使うんですかねぇ。 なんか普通のアプリで積極的に使う場面って想像つかないんですけど。 フレームワークの開発とかで使うのかな。
668 名前:デフォルトの名無しさん [2009/12/21(月) 23:13:04 ] 次の人が答えます
669 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:14:48 ] KVC はそれほど自分で直接呼ぶもんじゃないと思いますが、 Cocoa のいろんな部分 (KVO,バインディング) でランタイムが統一的に オブジェクトを弄れるための下支えになってます 例えば、ソースコードで -foo と -setFoo: を定義しておくと nib ファイルの中からビューをコントローラのキー foo に バインドできますが、その間の通信は KVC でやってるわけです。
670 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:24:18 ] >>667 値が変更された通知が欲しいときに色々と使えるだろ。 たとえば、テキストフィールドが編集されたときに何かをしてみたり。 それから、特定のスクリプトを処理するときに、コードがかなり短くなる。 たとえば、自力でXMLをパースする、みたいなときは、大幅にソースが簡単になる。 まぁ、まずは日本語ドキュメントでも読め。 developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueCoding/
671 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:31:30 ] 結構奥が深そうですね...ちょっとずづでも探ってみまする。
672 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:32:42 ] >>667 一々 IBOutlet と Action をおいてセッターとゲッターを作るより、Interface Builder でどうこう出来る分生産性が上がる。
673 名前:デフォルトの名無しさん [2009/12/22(火) 22:36:38 ] すみませんが、質問になります。 Objective-CからCのqsortを呼ぶ事ってできるのでしょうか? 第4引数をどうすればよいのか、途方にくれてます。 よろしくお願いします。
674 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 22:57:53 ] Cそのまんまだろ。それとも オブジェクトのメソッドでも突っ込む気か? その場合は関数でラッパーすれば良いだけだけど。
675 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:18:33 ] qsort_b って関数もあるぞ
676 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:52:54 ] >>673 C の配列をソートするのなら、C そのままでしょ。 Objective-C のオブジェクトは、C配列にいれないほうがいいです。 NSString* a[10]; とか余程でなければ誰も使わないと思います... よね。 NSArray つかって、ソートするときは、 sortedArray... とかいうメソッドが一杯あるので。
677 名前:デフォルトの名無しさん [2009/12/22(火) 23:58:01 ] >>674 ありがとうございます。そのまんまなんですね。 関数へのポインタを@selectorでとかやってたら、混乱してしまいました。 >>676 そうですか。Objective-Cが独特なんで、なるべく標準を使いたいと思ったりするんですけど、 やっぱり駄目ですかねー。
678 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:03:51 ] IMP とかそこら辺を学ぶと幸せになれるかも。
679 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:06:47 ] iPhone様々ですか?
680 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:08:51 ] >>877 Objective-C は C のスーパーセットだから。 C++ だって C でできる事はそのまま何でも出来るでしょ。 >そうですか。Objective-Cが独特なんで、なるべく標準を使いたいと思ったりするんですけど、やっぱり駄目ですかねー。 う〜ん、他の環境から Mac へ GUI だけ移植してるんなら、そういうのも判らなくないですが、 Mac / iPhone 用に一から書いてるなら諦めて Cocoa の使い方覚えたほうがいいと思います。 どうせ method の引数に文字列なら NSString, 配列なら NSArray を渡さないといけない事が しばしばあるので、どうせ使い方覚えないといけなくなりますし。
681 名前:654 [2009/12/24(木) 02:08:22 ] すいません。すれ違いなんですけど, 多分ここの人が詳しそうなんで、質問させてください。 xcodeでC言語の勉強をしてて、日本語の処理でつまったので教えてください。 #include <wchar.h> int main(void) { wchar_t str[] = L"日本語だよ"; printf("%s\n", str); printf("%S\n", str); printf("%c\n", str); printf("%C\n", str); wprintf(L"%s\n", str); wprintf(L"%S\n", str); wprintf(L"%c\n", str); wprintf(L"%C\n", str); return 0; }printfでマルチバイトのも文字列をあつかうにはどうすれば良いのでしょうか?上のコードは全部文字化けか出力できませんでした。xcodeのコンパイラって基本的にはgccなんですよね?その辺の情報を調べて上のように試してみたんですけど。 基本的にはNSStringをつかうので必要ないといわれればそれまでなのですが。 お願いいたします
682 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 04:05:53 ] なんでココなんだよ。 自分でスレ違いって分かってるんだからC言語のスレ行けよw そっちじゃいけない理由でもあるのか?
683 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 07:43:02 ] gcc の設定の問題で、Obj-C とも Mac と関係ない話だから、適切なところへ行ってくれ
684 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:58:46 ] はあ・・・低能さんって・・・
685 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 20:32:37 ] なんだか文法がいちいち長ったらしくて萎えるんですけど.. 文字列比較すんのに if ([a compare:b] != NSOrderedAscending) { : } とか、めんどくせーし、英語に慣れてないとぱっとみどう比較してんのかわからんちゅーの。 VBだったら if a >= b then : end if ちょーシンプル。ほんと萎えるよ。英語が分る人には読み易いのかもしんないけどさ。はぁ...挫折しそ
686 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 20:45:32 ] >>685 そのVBの記述だとエンコーディング考慮出来ないじゃんw C Stringで出来る所はそうすればいいし。そうでないところは Foundationでやればいい。どちらも取れるんだから。
687 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:16:37 ] >>685 英語の勉強になると思って頑張ってください。 物事こころの持ちようですよ。 挫折したければ挫折しても良いんだし。
688 名前:デフォルトの名無しさん [2010/01/11(月) 16:13:44 ] 例えばオブジェクトAがあるオブジェクトBを中で生成(alloc)して帰す場合、そのオブジェクトBをreleaseするのはオブジェクトAの責任なんですよね? で、そのオブジェクトBを配列で返すようなメソッドを書く場合 return [[NSArray alloc] initWithObjects:objectB, nil]; としてしまうと、だれが、このNSArrayをreleaseするのかってなっちゃいますよね? つまり、この場合NSArrayもオブジェクトAのメンバ変数に保持しないといけないってことでしょうか?
689 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 18:31:22 ] つ autorelease
690 名前:デフォルトの名無しさん [2010/01/14(木) 19:55:11 ] return [[[NSArray alloc] initWithObjects:objevtB, nil] autorelease]; とするか、 return [NSArray arrayWithObjects:objectB, nil]; とすべき。
691 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:48:56 ] 関係ないけど、s無し単数形の -[NSArray initWithObject:]もあるよ。
692 名前:デフォルトの名無しさん [2010/01/16(土) 21:17:35 ] 最近 Objective-C 2.0 を始めたんですが、ガベコレについて質問です。 ガベコレって retainCount が 0 になったインスタンスを自動的に解放してくれるだけで、 retain, release によるメモリ管理は必要なんですよね? NSAutoReleasePool でメモリ管理をしないでよくなった、という理解で良いでしょうか。
693 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 21:35:39 ] 全然違う。 ルートとなるNSAppから芋づる式に参照されてる(到達可能な)オブジェクトを保持し、 関連が無くなったオブジェクトを自動的に始末するシステムです。 journal.mycom.co.jp/special/2007/objectivec/002.html 参照カウントは使ってない。
694 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 21:39:39 ] C++は0xとか模索されてて鋭意進化中だけど、Objective-C は 3.0 が出来るとしたら、どんな拡張になるのかな?
695 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 22:34:26 ] 特にこれといって欲しい機能もないしなあ。 名前空間くらいか。
696 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:17:01 ] 無名関数、ラムダ式、ジェネリックは欲しい。 ちゅうかC++ 0x のコンパイラなんぞ実装するベンダーあるのかね。 IDE込みで考えると、かなり大変そうだけ。
697 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:21:47 ] 詳しくは知らんのだが、ブロック構文はラムダ式の代わりにはならんの?
698 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:27:04 ] >>696 >無名関数、ラムダ式、 無名関数とラムダって違うの? Blocks のクロージャじゃダメなの?
699 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:48:20 ] クロージャなんてものがあるのか。知らなかった。これ使いまくろ。
700 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:52:45 ] >>696 >ジェネリック 動的束縛な言語にジェネリックって必要か?
701 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:55:07 ] ジェネリック・プログラミングも、カテゴリを利用して出来るんじゃないの?
702 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:55:52 ] Blocksなんて機能あったんだ? 荻原本にも書いてないやんけ!
703 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:59:03 ] Dyna本にも書いてないよな、何故か知らないけど。
704 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 06:02:50 ] 本にのってないのは、block は snow leopard からの機能だからでしょ。 Objective-C の拡張というよりは C そのものの拡張という 位置づけにしたいらしいよ、Apple は。 まあ多分ほかにどこも採用しないから、 実質 Objective-C の機能という認識になるとおもわれるが...
705 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:29:38 ] >696 フル実装はしばらくかかるかもしれないけど gcc も VC も既に機能の取り込みを始めてるし、 C99 と比べれば段違いだと思われ。
706 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:30:28 ] 木下本が出たのは雪豹後だったはず。
707 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:17:37 ] >>706 違う。
708 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:19:15 ] >>706 あれは マイコミジャーナルに長期連載されてたのを まとめただけだから仕方がないね せめて 2.0 ランタイムについて一章だけでも付け加えてくれたらよかったんだが、 あれを買って 10.6 で実際にやってみようとしてはまってるひとが ときどきこのスレやら新 mac 板の Cocoa スレにでますね
709 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:54:05 ] あるクラスが持つプロパティの属性をassignにするべきか、retainにするべきか、copyにするべきかで悩んでしまいます。 結局わからないから、とりあえずassignにしとけってことが多いです。 独立性の高いクラスの場合はretainで保持した方がいいのかなと思ったりするんですが... 何か指針みたいなものってあるんでしょうか? それとも経験的な勘でみなさん決めてらっしゃるんでしょうか?
710 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 16:28:23 ] 最終的にどのタイミングで release されるか、を考えておくべき。