[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 12:16 / Filesize : 248 KB / Number-of Response : 975
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Objective-C [ObjC part:4];



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

577 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 16:21:30 ]
newとallocの違いが今イチ分からん。

578 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 17:30:29 ]
>>577
俺も俺も
てか乳って使ったことない。

579 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:03:58 ]
+newは+alloc -initと同義

580 名前:デフォルトの名無しさん [2009/12/01(火) 18:38:18 ]
typedef enum {a,b} defA;

といった宣言をヘッダに記述し、これを他のクラスからimportして
defA a;

のように利用しようとすると、
"expected specifier-qualifier-list before 'c'"とエラーが
起きてしまいます。
どのように定義すれば良いのでしょうか。

581 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 18:43:26 ]
enum {
a,
b,
};
typedef NSInteger defA;

582 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 19:24:09 ]
>>580
ソース

583 名前:580 mailto:sage [2009/12/01(火) 20:55:30 ]
すいませんちょう単純な勘違いしてました。
他のヘッダが邪魔をしていて、importの前に書いたらうごきました。。

584 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:11:37 ]
Objective-Cって、メソッド名ひとつ考えるのにも英語力を要求してくるな。
こりゃ、そんじょそこらのなんちゃってプログラマに扱えるしろものじゃねーな。

585 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 00:29:56 ]
なんちゃってプログラマでも簡単に使えるよ。英語さえわかれば。



586 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 00:50:29 ]
>>584
別に日本語ローマ字書きでもいいじゃん

587 名前:デフォルトの名無しさん [2009/12/02(水) 04:06:03 ]
辞書が存在していない時代だったらそう言えるかもしれないね。

588 名前:デフォルトの名無しさん [2009/12/02(水) 05:26:27 ]
辞書の歴史は紙の歴史より古いからなあ。

589 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:58:30 ]
DataWoTuika:id KonoIchini:idx omake:option

590 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 20:46:14 ]
引数がkonochincoとomekoに見える

591 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 21:10:19 ]
けしからん奴じゃ

592 名前:デフォルトの名無しさん [2009/12/03(木) 19:40:15 ]
NSStringにHTMLのソースが入ってるんですけど、
そこから<li>〜</li>の部分だけ抜き出したいと考えています。
ただ、それをどうやって実装すればいいのかが良く分からないです・・・。

今頭の中にある感じだと、<li>とマッチする最初の場所と
</li>とマッチする最後の場所を探して、その部分を抜き出すという方法なんですけど、
もっと簡単に正規表現みたいな感じでピュッと抜き出したりできないでしょうか?

593 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:19:18 ]
Google Toolbox for Mac の GTMRegex でも使え。

594 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 21:59:37 ]
まさかiPhone初心者スレで聞いてたやつじゃねーだろうな

595 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:07:13 ]
>>592
とりあえず簡単にやるならスキャナ使えば?

NSString *hoge = "hoge <ol><li>foo</li><li>bar</li></ol>";
NSScaner *scanner = [NSScanner scannerWithString:hoge];
while (YES) {
 NSString* itemString;
 if (![scanner scanUpToString:@"<li>" intoString:NULL]) break;
 if (![scanner scanUpToString:@"</li>" intoString:&itemString]) break;
 NSLog(@"item = %@",itemString);
}



596 名前:デフォルトの名無しさん [2009/12/04(金) 00:52:37 ]
>>592
NSXML 使って XPath でピョッと

597 名前:デフォルトの名無しさん [2009/12/05(土) 22:45:14 ]
なんか、releaseしなきゃならん場合としないでいい場合の違いが良くわからんわ。
本のサンプルとかみても、retainしてるのに、どこにもreleaseがなかったり、allocして
autoreleaseも呼んでるのに、deallocでreleaseもしてたりとか、もうわけわかめ。
なんじゃこりゃ、そんなに神経質にならなくてもいいのか?

598 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:07:44 ]
カウンタ使ってメモリ管理するなら当然覚えないと、意味不明なバグに遭遇することしきり。
自分は Instruments の Leaks 使って、可視化されたメモリリークを見ながら試行錯誤して覚えたけど。

599 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:09:06 ]
あと初心者は Build & 解析はかなり役に立つんじゃ。

600 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 03:36:39 ]
まずは
developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_8_section_2.html
を読まんといかんよ。

iPhone じゃなくて Mac のプログラムならガーベジコレクション ON
にして retain/release 忘れるという方法もあります。

ただ、
>サンプルとかみても、retainしてるのに、どこにもreleaseがなかったり、allocして
>autoreleaseも呼んでるのに、deallocでreleaseもしてたりとか、もうわけわかめ。
これは本が間違ってるんじゃないの?何の本かわからんから何とも言えんが。

601 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 06:55:11 ]
>>597
そんな本あるなら晒してみろよ

602 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:36:42 ]
初期化するインスタンスメソッドの他に、勝手にAutoreleaseするクラスメソッドも
あったりするからちょっとややこしい。

603 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:45:34 ]
(あるクラスの init メソッド内で、インスタンス変数に代入するオブジェクトを)retainしてるのに、
(init 内の)どこにもreleaseがなかったり、
(そのクラスを)allocして autoreleaseも呼んでるのに、
(そのクラスの)deallocで(インスタンス変数を)releaseもしてたり

と解釈するとしたら、まったく正しいコードけど

604 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:53:05 ]
>>601
サンプルはあくまでサンプル。アプリまるごと完全詳解みたいのならともかく。
Obj-Cに限らず、その他言語のO'Reilly本やMSDNでも、
サンプルソースと現実的に推奨されるソースは異なる場合は多い。
参照カウンタの説明でretainしたものをreleaseしてないなら問題だと思うけど、
多分、別の説明で使用されているサンプルがそうなってるんでしょ。

>>602
>勝手にAutoreleaseするクラスメソッド
コンビニエンスコンストラクタのこと?

605 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 14:10:04 ]
>>604 あぁ多分それ
俺もこの辺、よく迷うわ。propertyの宣下にもretainやassignの指定があるから、
宣言をよく確かめて使わないとかいけないとか気を使うのがちょっと大変。

便乗質問なんだけど、あるクラス(A)で動的にView(B)を作って(alloc & init)、
別のView(C)にaddSubView した場合って、Aで明示的にBをreleaseする必要
があるんだっけ? それとも、Cの解放時にBも勝手にreleaseしてくれる?





606 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:11:08 ]
当然あるよ。

607 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:34:14 ]
>>606
何が当然あるか? Aで明示的にBをreleaseする必要があるという意味あるか?

608 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:47:51 ]
ないあるよ

609 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 16:09:08 ]
hoge = [[Hoge alloc] init]; // 1
[foo addHoge : hoge]; // 2



[foo release]; // 1

よってメモリリークになる。
だから、autorelease か add 後に [hoge release]; の必要がある、筈。

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 されるか、を考えておくべき。

711 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:22:22 ]
やっぱりオブジェクト型のプロパティはretainしてdeallocでreleaseしといた方が確実なんですかねぇ。
autoreleaseされたプロパティを渡される可能性もあるし。
となるとassignの使いどころって、数値型や文字列とかのプリミティブ型に対してってことになっちゃいますかねぇ...
copyは...ゔーん、まいっか。

712 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:31:54 ]
>>711
delegate や target など、 retain にすると循環参照でリークする人が
出そうなものは少し考えたうえで assign にしたりする。

知らぬ間に内容を変更されたくないオブジェクトで、 retain で受けると
mutable string を渡したあとで中身を変更する人がいるかもしれないな、
などと心配する暇があるときは copy。

面倒なときはどっちも retain にしといて使う側が気を付けることにする。

713 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 19:08:42 ]
あぁdelegateね、これは確かにサンプルとかみてもassignにしてあるのが多いですね。
まだ覚束ないですが、少し自分なりに整理できそうです。ありがとうございしました。

714 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:09:44 ]
Xcodeって「¥」と「¥」(バックスラッシュ)って区別されてんのね。どおりで¥n入れても改行せんわけだわ。

715 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 00:09:40 ]
XCode が、じゃなくて、標準のユニコードがそうなだけ




716 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 17:01:56 ]
C と c は区別したーい

717 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 08:38:46 ]
>>709
Google の Style Guide だと NSString なプロパティはとりあえず copy にしとけってことになってる
google-styleguide.googlecode.com/svn/trunk/objcguide.xml?showone=Properties#Properties

718 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 13:16:24 ]
Google は最早 Apple の敵だが、参考にしよう。

719 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 18:17:39 ]
敵判定って空しくなるだけ。

720 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 20:30:17 ]
Googleは、アップル製品をアク禁できるんだから、Googleに戦う気があったら勝負にならない。

721 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:30:28 ]
- (int)hoge:(int)a;
みたいなメソッドを、performSelector:withObject: のように(SEL)と引数を与えて動かす方法ってないのかな?
int を NSNumber にするしかない?

722 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:31:34 ]
>>721
面倒くさいが、NSInvocation を作って動かすとか。
id invocation = [NSInvocation invocationWithMethodSignature:
 [piyo methodSignatureForSelector:@selector(hoge:)]];
int arg = 1;
[invocation setArgument:&arg atIndex:2];
[invocation invoke];
int rtn;
[invocation getReturnValue:&rtn];

723 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:34:24 ]
ターゲット設定してなかった。[invocation setTarget:piyo] をやるか、
[invocation invokeWithTarget:piyo];

724 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 17:59:29 ]
>>722-723
NSInvocation って以前見かけて、結局使い道が分からなくて放置してたクラスだけど、色々調べてみます。
ありがとう。

725 名前:デフォルトの名無しさん [2010/01/31(日) 23:32:14 ]
>>720
Macユーザのシェアがごっそりなくなるから無理だろうな。




726 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 22:47:01 ]
それはぶっちゃけ言うほど痛くない

727 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 02:14:29 ]
Google使えなくなったら大部分は乗り換えるだけ。

728 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:10:35 ]

Google社員にもMac愛好家くさるほどいんのにそんな誰得の展開になるわけないだろ
使えなくしたらグーグルの勝ち〜とか発想が幼稚すぎるわ

おまえらなんでそんなに頭悪いの
とてもプログラミングできるような頭じゃないと思うんだがなんでこのスレにいんの
 

729 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 05:14:53 ]
キミ凄いね

730 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 07:58:20 ]
社員の趣味と企業戦略を一緒くたにして話す奴も大概頭悪いと思う

731 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:09:37 ]

なんでプログラマやデザイナやミュージシャンとかクリエイティブなやつらにMac使いが多いか考えたことないだろ
Macを除外する企業戦略とかニートや低脳厨房の発想
 

732 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:20:13 ]
理由は唯一つ
お洒落だからですが何か

733 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:55:20 ]
プログラマはねーよww

734 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:03:39 ]
(クリエイティブな)ブログラマってことだろ

735 名前:デフォルトの名無しさん [2010/02/02(火) 22:54:44 ]
>>731
デザイナーとミュージシャンにMacが多い理由は、割れの巣窟だったから。
写真屋とか、9割が違法コピーって言われてた。



736 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:57:15 ]
開発環境がそっくり入ったUNIXマシンなんだからプログラマが選んでも
何の不思議も無いと思うが

737 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:39:43 ]
Googleの中の人とか、Ruby on Railsの人とか、イケテルプログラマはMac使いが多いね。

738 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:45:06 ]
Linus ってイケてたっけ?

739 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:45:47 ]
PDFをネイティブにサポートしてるからPDFのドキュメントも読み易いしね。
あとLeopard以降は64bitアプリそのまま使えるから、64bit版OSインストール
し直しなんて手間も要らない。

740 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:07:30 ]
MacはUNIXなんだから、ドザじゃないまともなプログラマはMac使う

741 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:21:08 ]
犯罪者が必死だな。

742 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:42:40 ]
あらやだ
くやしいんですね
だいじょうぶですよ
がんばって知能つけましょうね

743 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:46:49 ]
カンファレンスや勉強会に行くと、もう過半数がMacだなぁ。
発表者なんか下手すると9割くらいMac。サポートがしょぼいはずのJava系ですら半分がMac。
個人的に、2kgを超えるモバイルマシンなんざありえねぇと思ってるので、正直理解できん。Airは中途半端すぎるし。

744 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:01:37 ]
個々は GNUStep, Cocotron もふくめた Objective-C のスレですよ!
Mac の話題なんてとんでもない!ぷんすか

745 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:03:36 ]
StepStone ってどうなったんだっけ?



746 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:09:05 ]
>>745
NeXT が Objective-C の権利を買い取ったあともしばらく存続してたけど、
消滅したらしい
en.wikipedia.org/wiki/Stepstone

747 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:40:00 ]
プログラマは、技術的に面白い物は全部触ってみたくなる人種だ。
OSXとLinuxとWindowsが全部動くマシンがMacしかない以上、
他に選択肢は無い。
電話もiPhone持ちが大半だが、加えてAndroidも持ってたりするぞ。

748 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 14:03:23 ]
複数持つだけ
全部動くからという理由じゃ選択しないよ

749 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 20:20:42 ]
一人暮らしでもマシンが複数台あってLANでつながってるのが当たり前だと思うんだが。

750 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 20:23:22 ]
最近は仮想マシンでも十分な性能が出るから、うちはハードは1台だよ。

751 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:08:12 ]
はーどうしたどうした

752 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:31:58 ]
>>750
新しい機種を導入するたびに前のは破棄してるのか

753 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 15:11:30 ]
>>752
中古屋に売ってます

754 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 16:40:22 ]
CocotronでWin用のアプリ作ってみたひといませんか?
実用的ならうれしい。

755 名前:デフォルトの名無しさん [2010/02/06(土) 22:18:35 ]
初心者です。質問させてください。
stringWithCStringを使うと、コンパイル時に
warning: ‘stringWithCString:’ is deprecated
がでました。

stringWithCStringの代わりに何を使うのがよいですか?



756 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 22:26:32 ]
Xcodeのヘルプメニューからたどれるドキュメントを読みましょう。
またはメソッド名 (stringWithCString:) のところでOption+ダブルクリック

757 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:20:28 ]
初心者はこのスレに来るな

758 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:31:21 ]
え〜っ、なんで?

759 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:35:52 ]
>>752
他人にあげたり、捨てたり、死蔵したり

>>755
>stringWithCStringの代わりに何を使うのがよいですか?

stringWithCString:encoding:

760 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 14:33:01 ]
複数のPCがあっても仮想マシン導入して、前のは捨てるのか。
どのくらいのペースで買い替えてるんだろう。

うちはしょっちゅう買ってるから1人暮らしなのにPCは常時7〜8台あるわ

761 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:16:51 ]
もはやPCを買うことが目的になってるな。

762 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 20:04:59 ]
>>758
冗談でつ
でも質問が下らな過ぎてちょっとうんざりした。最近はドキュメント読まないゆとりが増えたのかなー。

763 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:52:54 ]
>>762
うちはこないだ新人向けに調べ方の調べ方マニュアルを作ったな。
よくあるのがググる先生に頼りすぎて、ヘルプや付属ドキュメントを読まないとか。

764 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 02:42:50 ]
調べ方マニュアルじゃなくて、
調べ方の調べ方マニュアル、なのか?それはメタだなぁ...


765 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 12:59:27 ]
メタメタにしてやんよ



766 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:39:02 ]
お願いします。

767 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 15:28:42 ]
メメタァ

768 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:00:04 ]
うわあああああぁぁぁああああ!!!

769 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:32:17 ]
バルス

770 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:44:24 ]
ふぅ..

771 名前:デフォルトの名無しさん [2010/02/15(月) 02:45:53 ]
Objective-C入門3日目の初心者です。
フォルダのファイル一覧を、とりあえずコンソールに出してみようとしています。
本やWebを参考にして次のようなコードを書いたのですが、エラーがありうまくいきません。
添削していただけないでしょうか。

初心者は来るなってことだったのですが、
Objective-C初心者はどのあたりにいけばよいでしょう?

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
NSString *rootpath = @"/Public";

BOOL result = YES;
NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath:rootpath];
int i;
for (i = 0; i < [contents count]; i++) {
NSString *name = [contents objectAtIndex: i];
NSString *path = [dirPath stringByAppendingPathComponent:name];
BOOL isDir;
NSLog(@"\n%@", path);
}
return 0;
}


772 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 03:13:08 ]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
NSString *rootpath = [NSHomeDirectory() stringByAppendingPathComponent : @"Public"];
NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath : rootpath];

for (NSString *name in contents)
NSLog(@"%@", [rootpath stringByAppendingPathComponent : name]);

[pool release];

return 0;
}

773 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 09:47:18 ]
一見して良いように見えるが、どんなエラーがでるの?
僕らだってエスパーじゃないから、「エラーがでます」じゃわからんよ。
コンパイルエラーならコンパイルエラーを書き写してもらわんと困るし、
実行時のエラーならどんなエラーなのか書いてください。
「エラーがでます」とだけここに書き込むのは、
エラーが出て、エラーメッセージを解読する気がないという気がします
それではプログラムは上達しませんよ。

単に ~/Public になんもファイルがないだけでは、と言う気がします。

774 名前:デフォルトの名無しさん [2010/02/15(月) 10:58:25 ]
>>772
おお。ありがとうございました。
早速実行したところ、
warning: 'directoryContentsAtPath:' is deprecated (declared at /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h:164)
と警告が出てビルドできませんでした。
これは、どこを見ればよいのでしょう?
というか、NSFileManager.hの164行なんだと思うので、
見たところ、

- (NSArray *)directoryContentsAtPath:(NSString *)path DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER;

という行でした。
NSString *rootpath = [NSHomeDirectory() stringByAppendingPathComponent : @"Public"];

NSString *rootpath = [[@"~" stringByExpandingTildeInPath] stringByAppendingPathComponent : @"/Public"];
などいくつか試したのですが、どうしてもうまくいきません。


775 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:56:23 ]
英和辞書をお奨めする



776 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:29:09 ]
雑談と初心者いじりしかやらないよねMac系の開発スレって

777 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:57:21 ]
このレベルから教えるのは正直きっついな

778 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 13:17:01 ]
警告だからコンパイルは一応通ってるんじゃないの?
OS 10.5以降は非推奨メソッドだから使わないでねって警告なんじゃないの?

779 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:01:11 ]
>>774
コンソールを表示してみ。

> ビルドできませんでした。

嘘付かないでね。

780 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:10:21 ]
>>776
これがわからないってことは、リファレンスどころか警告すら読めてないってことでしょう。
その状態でObj-Cで開発やるのはかなり厳しいよ。

で、「(やる気があるのなら)英和辞書をお奨めする」ってことなんだけどな。

それとも警告出るたびに聞きに来るの?

781 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:31:03 ]
そういうレスだけは饒舌だなw

782 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:24:34 ]
まぁまぁ^^;

783 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:49:27 ]
むしろ
「Cocoaスレに行け」とか
「Mac プログラミングスレに行け」
って言われなかったのが奇跡だな…
# Foundation Framework ネタはどこが適切なんだろ…?

784 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:58:27 ]
内容ジャンル的にはここでも問題ないと思うが、このレベルの無知無知初心者を相手にするのも大変だろう。

785 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:04:11 ]
deprecatedはもうすぐなくなるよってこと。今はまだある。
これはすごく親切な警告。

なのでdirectoryContentsAtPath:をopt+ダブルクリックしてみる。リファレンスが表示される。

Special Considerations
Because this method does not return error information, it has been deprecated as of Mac OS X v10.5. Use contentsOfDirectoryAtPath:error: instead.

って書いてあるので代わりに
contentsOfDirectoryAtPath:error:
を使う。




786 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:05:44 ]
調べ方教えたんだから同じ内容ではもう来るなよ

787 名前:デフォルトの名無しさん [2010/02/15(月) 19:44:43 ]
>>775-786
まあそうおっしゃらずに、
もうすこしおつきあいいただけないでしょうか。

さきほどのファイル一覧は、あらためてプロジェクトを作り直したら、問題なく動きました。
一覧も取得できました。

失敗したときは、まだトライ&エラーの段階なので、
ひとつのプロジェクトのソースを全選択して、
消しては新しいソースを貼りつけて、
実行していたのです。

ソースじたいは変更していないのですが、
ともあれお騒がせしました。

で、次なのですが、いちおう辞書片手に読んでますけど、
(1)デバッグ中に変数に代入されているデータを見る方法
(2)コンソールコマンドから、テキストエディタとかのGUIアプリケーションを実行できるのか?
の2点を教えていただけないでしょうか。

(1)ブレークポイントを設定してみるものの、
そのデータが具体的になになのか、確認するには、
どこのメニューでどれを見ればよいのでしょう?

(2)ソースは次のとおりで、実行すると、デバッガコンソールでいろいろ表示したあと、
(gdb)というモード? になり、期待していたように、
テキストファイルをテキストエディタで表示はしませんでした。

そもそもこういう方法で、外部のアプリケーションを起動できるんでしょうか?
アドバイスお願いします。


788 名前:デフォルトの名無しさん [2010/02/15(月) 19:46:20 ]
#include <Foundation/Foundation.h>

int main() {
NSTask *noteTask = [[NSTask alloc] init];
NSMutableArray *noteArgs = [NSMutableArray array];

NSString *path;
path =[[NSHomeDirectory()
stringByAppendingString:@"Public/tmp.m"];

// configure note
[noteArgs addObject: path];
[noteTask setLaunchPath: @"/Applications/TextEdit.app/Contants/MacOS/TextEdit"];
[noteTask setArguments: noteArgs];

// launch applications
[noteTask launch];

// wait applications
return 0;
}


789 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 20:03:01 ]
>>787
(1)
ブレークポイントで停止したら適当な変数名にカーソル合わせる
またはデバッガコンソールで p コマンドか po コマンド使う
p は C の基本データ型、 po は ObjC のオブジェクトの内容を表示する
p intVar
po object
po [object value]
てな具合
あとは help コマンドで調べて

(2)
>[noteTask setLaunchPath: @"/Applications/TextEdit.app/Contants/MacOS/TextEdit"];
Contants じゃなくて Contents な
「いろいろ表示」された中に手掛かりが書いてある、ちゃんと読めよ

790 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:17:46 ]
親切だなぁ

791 名前:デフォルトの名無しさん [2010/02/15(月) 22:27:00 ]
>>789
ありがとうございました。


792 名前:デフォルトの名無しさん [2010/02/18(木) 23:36:01 ]
Objective-C気持ち悪い

793 名前:デフォルトの名無しさん [2010/02/18(木) 23:48:27 ]
テキストフィールドに入っている文字のバイト数が一定値以上だったらエラーを出したいのですが

NSLog(@"OK %d", MAX_TITLE_LENGTH-strlen([[tfThreadTitle text] cStringUsingEncoding:NSShiftJISStringEncoding]));

if(MAX_TITLE_LENGTH-strlen([[tfThreadTitle text] cStringUsingEncoding:NSShiftJISStringEncoding])<0)
{
  NSLog(@"haitta");
  return;
}

その一定値を超えてもこのif文に入ってくれません。
NSLogで数値の確認をしてみたのですが、-2となっているのにも関わらず、
直後のif文の判定を素通りしているようです。何が原因なのでしょうか。。助けてください。。

794 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:12:12 ]
>>793
NSStringのUTF8Stringを使ってconst char *型の文字列の先頭ポインタを取得して使う。

795 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:55:56 ]
>>793
strlen の戻り値は符号なしだから、> の左辺はマイナスにならないよ。
if (strlen(...) > MAX_TITLE_LENGTH)
と書くべき。C 言語からやり直しだね。  



796 名前:デフォルトの名無しさん [2010/02/19(金) 02:25:05 ]
>>794-795
ひゃあ、ありがとうございます。
strlenの戻り値はunsignedなんですね。。。
ありがとうございました。

797 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 06:08:41 ]
NSString*を返り値として返す関数があるのですが、

NSString* func()
{
NSString *str = [[NSString alloc] initWithFormat:@"%d", 1];
return str;
}

例えばこういう場合って、どうすればいいのでしょうか?
releaseしたらreturnできませんし、returnしたらreleaseできませんよね?

798 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 06:25:45 ]
>>797
まさにそういう時のためにautoreleaseがあるのだよ

799 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 08:16:29 ]
お〜autorelease!!
ありがとうございます!
[[[NSString alloc] initWithFormat:@"%d", 1] autorelease];
でいいんですよね!ありがとうございますっ!

800 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 08:23:43 ]
この場合stringWithFormatもあるけどな。

801 名前:デフォルトの名無しさん [2010/03/03(水) 23:55:05 ]
iPhone作りたいんですけど、なにせwin野郎なんでMac全然勝手が分かりませんw
とりあえずiPhone用の開発環境揃えたいんですけど、お勧めセット一式誰かお願いできますか?
あと、windows系とのネットワークファイル共有って簡単にできるでしょうか?

802 名前:デフォルトの名無しさん [2010/03/03(水) 23:57:28 ]
まだ、ソフトもハードも無いので、勧めセット一式はソフトハードセットでお願いできるとありがたいです。

803 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:00:59 ]
スレ違い。死んでくれ。

804 名前:デフォルトの名無しさん [2010/03/04(木) 00:01:26 ]
Objective-C気持ち悪い

805 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:03:08 ]
じゃあ Objective-C は代わりにおじさんがやっておくわ



806 名前:デフォルトの名無しさん [2010/03/04(木) 00:04:27 ]
Appleて、現代的な言語作ってないんだよな

807 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:05:47 ]
ObjC が最強過ぎるからな

808 名前:デフォルトの名無しさん [2010/03/04(木) 00:11:26 ]
Objective-Cなんて糞は正直触りたくない

809 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:15:36 ]
代わりに俺が触っておくから、寝てて良いよ

810 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:19:24 ]
お前に触られるぐらいなら死んだ方がまし

811 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:21:25 ]
いや、お前を触るわけじゃねえw

812 名前:デフォルトの名無しさん [2010/03/04(木) 00:25:01 ]
>>803-811
マジ頭おかしいんじゃね、お前ら
樹海にいって首つって死ね

813 名前:デフォルトの名無しさん [2010/03/04(木) 00:26:21 ]
iPhone作りたいんですけど、なにせwin野郎なんでMac全然勝手が分かりませんw
とりあえずiPhone用の開発環境揃えたいんですけど、お勧めセット一式誰かお願いできますか?
あと、windows系とのネットワークファイル共有って簡単にできるでしょうか?
まだ、ソフトもハードも無いので、勧めセット一式はソフトハードセットでお願いできるとありがたいです。


814 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:26:55 ]
>>802
ソフトは登録してダウンロードするだけだよ
ハードは現行機種なら何でも良いけど、メモリ多めの方が何かと良いよ

815 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:34:15 ]
>>801-813
このスレ荒らして何の得がある……



816 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:28:26 ]
>>813
iPhone作りたいなら中国の工場に就職しろ

817 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:57:20 ]
>>813
こんな質問してるくらいだから、多分無理なんだろうな。
下手に教えないほうがいいぞ。手を出し始めたらこのスレがくだらない質問であふれかえってしまう。

818 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 02:48:17 ]
>>813
MacProとCinemaDisplayオススメ
あとFinalCutStudioとLogicかな。
なんやかや結局揃えるハメになるので最初にまとめて買っておくが吉。
ノートで十分とか言う奴がたまにいるが、デスクトップだとアプリのビルド時間が断然早く作業効率が非常に良い。
Windowsとの共有は簡単にできるよ。

819 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:30:42 ]
とりあえずインテルのMac mini買えばあとはオンラインで全部そろう
それでエミュレーションで動かしてから考えるといいんじゃないかな

820 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 15:41:41 ]
>>818
どもどもです、とりあえずそれでいってみようかと思います。
リソースの編集もMac側でやった方が効率いいですかね?
コードだけそっちで作ってみようかと目論んでいたのですが・・・

821 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 16:16:18 ]
>>820
どっちでもいい。
あと最初にしっかりガンマ特性や色温度の管理うぃやっておけば、
実機で印象が変わったりジャギーが目立つ等の問題も避けられる。
(ある程度までは、だけど)

822 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 17:22:02 ]
>>818
アプリのビルド時間が早くなるって、どういうことだ?

823 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 18:21:28 ]
マシンの性能差だろ。

824 名前:デフォルトの名無しさん [2010/03/07(日) 01:53:25 ]
iPhone用のアプリを作っていますが、NSDictionaryの使い方で悩んでいます。

以下の1行で、プログラムの実行が異常終了してしまいますが、理由がわかりません。どなたかヒントをいただけませんか?

sControls = [NSDictionary dictionaryWithObjectsAndKeys: display1, card1, display2, card2, display3, card3, display4, card4,nil];

ただし、
IBOutlet UILabel *display1;
IBOutlet UIButton *card1;
IBOutlet UILabel *display2;
IBOutlet UIButton *card2;
IBOutlet UILabel *display3;
IBOutlet UIButton *card3;
IBOutlet UILabel *display4;
IBOutlet UIButton *card4;
です。

最初は、card1〜card4のいずれかがnilで、その結果NSInvalidArgumentExceptionが起きているのでは?とデバッガで値を検査しましたが、そうではありませんでした。


825 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 01:55:31 ]
デバッガのコンソールメッセージは以下の通りです。
よろしくお願いします。

2010-02-24 00:15:27.446 XXXXXXXXXXX[69972:207] *** -[UIRoundedRectButton copyWithZone:]: unrecognized selector sent to instance 0x3b14a50
2010-02-24 00:15:27.447 XXXXXXXXXXX[69972:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIRoundedRectButton copyWithZone:]: unrecognized selector sent to instance 0x3b14a50'
2010-02-24 00:15:27.449 XXXXXXXXXXX[69972:207] Stack: (
29258843,
2531099913,
29640763,
29210230,
29062850,
28990666,
28990186,
28988857,
10209,
3209026,
9269,
2692555,
2730422,
2718516,
2700927,
2728033,
37354841,
29043584,
29039688,
2694677,
2731951,
9184,
9038
)




826 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 03:14:30 ]
一旦MutableDict 作って、一個ずつKey と Objectを設定してみろ。

827 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 03:44:06 ]
>>824
keys must conform to the NSCopying protocol

828 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 19:35:03 ]
メソッド名を良く読めって話だな。割と罠ポイントだとは思うがw

829 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 02:05:24 ]
もうvisual studioもeclipseも触りたくない。

830 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 10:14:51 ]
そんなあなたにNetBeans

831 名前:デフォルトの名無しさん [2010/03/20(土) 09:23:49 ]
live.nicovideo.jp/watch/lv13400073

832 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 09:43:57 ]
ニコ厨死ねよ

833 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 23:17:05 ]
口半開きってやっぱダメだな

834 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:03:17 ]
あの、ポインタに対して使う * っていうのは、内容を複製して渡すのでしょうか?

例えば、NSTextField* field があったとして、

isnumber(*[field.text UTF8String])

としたとしますよね。この場合、[field.text UTF8String] だけで渡そうとすると
ポインタだからダメ、みたいな感じで怒られますが、*を付けるという事は
その中身を渡すという事ですよね?

中身を渡すというのは、そのポインタが指す中身を複製してその関数に渡して
いるのでしょうか?

質問がうまく伝わっていなかったらすみません。どうも中身を渡すというのが
どういう意味なのかがよく分からなくて…。Objective-C 以前に C が分かって
いないのでおかしな事を言っていたらすみません。

835 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:05:36 ]
すいません、NSTextField -> UITextField の間違いでした。



836 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:54:43 ]
>>834-835
Cは(Objective-Cも)値渡しだから、ポインタだろうがなんだろうが
渡すときは常に中身がコピーされる。
ポインタを渡したときは、コピーされるのはポインタの値だから
中身はコピーされないな。
中身を渡したら中身がコピーされるだろう。

837 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:56:42 ]
>>836
中身っつうか、渡したものが常にコピーされるってことね。
分かりにくかったらすまん。

838 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 20:18:47 ]
>>834
>あの、ポインタに対して使う * っていうのは、内容を複製して渡すのでしょうか?
合ってる、けど「中身」が何であるか勘違いしないように

[field.text UTF8String] は char * を返すんだが、この場合の中身は
先頭の1文字であって文字列全体じゃないからな

839 名前:834 mailto:sage [2010/03/23(火) 16:42:01 ]
>>836
ありがとうございます。

ポインタを渡したらそのポインタの値がコピーされるという事ですよね。

>>838
ありがとうございます。

そうそう、そこも不思議だったんですよね。実際に isnumber はどう
処理しているのでしょう?アドレスに1ずつ足していきながら NULL 文字
がくるまでを文字列と判断するのでしょうか?

ソースを探したんですが見つからなくて…。

840 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 17:52:23 ]
isnumber が扱うのは「(所謂)文字列」ではなく「文字」だよ。

841 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:07:21 ]
>>839
>アドレスに1ずつ足していきながら
「文字列」(char *、つまり連続した文字の先頭へのポインタ)を受け取る関数についてはその通り
ただ isnumber は >>840 が言うとおり「文字」(char)を受け取って、
その1文字が数字どうかを判別する

842 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:59:21 ]
>>840, 841
げげっ!そうなんですね、という事は、何らかの NSString が数値として
解釈できるかどうかは、何か別の方法で判定しなくてはいけないという事ですね。

Objective-C というよりは Cocoa っぽい話題で申し訳ないですが、皆さんは
ある NSString が数値として解釈できるかどうかはどの様に判定していますか?

843 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 23:19:09 ]
NSNumberFormatter ?

844 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 23:20:20 ]


845 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 00:04:21 ]
>>843
NSNumberFormatter 使ってみたんですが、例えば aiu6 とかが蹴られるのは
いいんですが、6aiue とかやると解釈されちゃうんですよね。

厳密モードみたいなものがあるのかと思ったんですがないし…。

正規表現とかでやるしかないんでしょうか。と思ったら Cocoa には正規表現を
するためのクラスがないんですね、ガーン…。困った…。



846 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 06:32:26 ]
ogrekit

847 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:31:40 ]
-[NSNumberFormatter getObjectValue:forString:range:error:]
が使えるんじゃないかな。

自分は libc の strtol() 系で事足りてるから使ったことないけど。

848 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:49:40 ]
sscanf()のObjective-C版が欲しいと思ったことありませんか?

UTF-8が処理出来るとかなり違うかと思うのですが。

849 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:51:07 ]
NSScanner

850 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:53:35 ]
>>847
やってみたんですが、やはり 0aiu みたいなものは解釈されてしまうみたいですね。
しょうがないので、数値かどうかを判断する関数を作り、とりあえずそこで数値と
判断したものだけ実際に数値に変換させる様にしました。

どうもおさわがせしました。でもなんか楽しいですね、Objective-C を頑張って
覚えたいです。

851 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 13:48:33 ]
>>850
range:

852 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:06:47 ]
-getObjectValue:...より簡単な-numberFromString: は使ってみたか?
自分の環境では6aiueはNULLを返す。
厳密モード的な動作は -setLenient: で切り替えられると思うが,NSNumberFormatterのAPIページくらい目を通したか。
ただ6aiueの解釈には影響ないみたいだが。
あるいはgetObjectValue:...を使いたいなら >>650 の通りだな。

853 名前:834 mailto:sage [2010/03/25(木) 18:27:08 ]
>>852
ありがとうございます。

もちろん numberFromString は使ってみたのですが、普通に
数値として返ってきてしまうので困っていました。

setLenient も指定してみましたが、効果がありませんでした。

やり方がいけなかったんですかね…。家に帰ってもう一度やってみます。

854 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 09:20:21 ]
shouldNotImplement: や notImplemented: って、
may not respond to '-notImplemented:'
ではなくするには何をインポートすれば良いんだ?

#import <objc/Object.h>
やっても意味無いようだけど。

当方OSX 10.6。


855 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 12:25:59 ]
>>854
- (id)hogehoge {
return [self notImplemented:nil];
}

こうなってんじゃないの?
子クラスで -hogehoge を再定義すれば



856 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 15:27:23 ]
>>855
? いや、
- (void)hoge {
[self notImplemented: _cmd];
}
をエラー無くビルドしたいんだけど。notImplementedされてるクラスを云々じゃなくて、自分でnotImplementedしたいんだ。
今クラスクラスタ作ってるところで。

857 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 02:16:08 ]
>>856
ああすまん
自分で空の -(void)notImplemented: を定義すりゃいいんじゃね

858 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 00:45:54 ]
NSArray* array = [NSArray arrayWithObjects:@"a",@"b",@"c",NULL];

みたいな、オブジェクトをカンマで区切って複数指定できるメソッドって、
定義する側ではどう書くのでしょうか?

もしや、カンマで区切って繋げると自動的に NSArray に変換してくれたり
しているんでしょうか??

859 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 01:45:11 ]
可変長引数でググレカス。

developer.apple.com/mac/library/qa/qa2005/qa1405.html

あと Foundation クラスの実装例が見てみたいなら CF や libFoundation のソースでも読んどけ。
www.google.com/codesearch/p?#_rn0kgFhkQA/redir/sope/55519/url_tgz/sope-4.5.4-nevermind-r878.tar.gz|EGqseItem4o/sope/libFoundation/Foundation/NSArray.m

860 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 02:30:46 ]
先生、「可変長引数」という単語を知らない人はどうなりますか…。

という冗談は置いておきまして、ありがとうございました。

ただ、可変長引数という単語で検索してもほとんどきちんと解説している
サイトってないですね…。「va_list」とか「va_start」とか一体何者なのか
分かりませんし…。まぁとにかくそのあたりから調べてみる事にします。

ありがとうございました。

861 名前:デフォルトの名無しさん [2010/04/05(月) 12:54:31 ]
これだからゆとりは

862 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 13:26:03 ]
ダイナミック本ってどうなの

863 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 15:20:27 ]
索引付いてないし装丁も粗いし、Webの奴読んでりゃ良いと思うよ。

864 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 18:52:14 ]
最近のプログラマーはやった物勝ちなんだな

865 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 14:39:34 ]
objc2 runtime 関数 const char *class_getIvarLayout(Class cls); について質問です。
この layout というのは、どういうものなのでしょうか?
ソースコードを調べていくと、objc-runtime-new.h に
class_t 構造体->class_rw_t 構造体->class_ro_t 構造体->uint8_t *ivarLayout
となっていて uint8_t*型だとわかりましたが、何の値を示すものなのでしょう?
よろしくお願いします。




866 名前:865 mailto:sage [2010/04/14(水) 15:44:41 ]
解決には至っていませんが… objc-layout.m に GC につかうもの、っぽいことが
書いてあります。が、いまいちどうなっているのかよく分からないので、
ご存知の方がいらしたら、ご教示お願いいたします。
/**********************************************************************
* Object Layouts.
*
* Layouts are used by the garbage collector to identify references from
* the object to other objects.
*
* Layout information is in the form of a '¥0' terminated byte string.
* Each byte contains a word skip count in the high nibble and a
* consecutive references count in the low nibble. Counts that exceed 15 are
* continued in the succeeding byte with a zero in the opposite nibble.
* Objects that should be scanned conservatively will have a NULL layout.
* Objects that have no references have a empty byte string.
*
* Example;
*
* For a class with pointers at offsets 4,12, 16, 32-128
* the layout is { 0x11, 0x12, 0x3f, 0x0a, 0x00 } or
* skip 1 - 1 reference (4)
* skip 1 - 2 references (12, 16)
* skip 3 - 15 references (32-88)
* no skip - 10 references (92-128)
* end
*
**********************************************************************/

867 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:29:58 ]
コメントを読んだ感じだと、
あるオブジェクトが他のオブジェクトを参照するのに使っているポインタ領域が
どのオフセット位置にあるのかを表しているように読める。
例として書いてある { 0x11, 0x12, 0x34, 0x0a, 0x00 } だと、
各々の上位ニブル(= 4 ビット)分スキップしてと下位ニブル分だけワードを読むことになっているので、
まず、 0x11 で 1 ワードスキップして 1 ワード見る
次に 0x12 で 1 ワードスキップして 2 ワード
0x3f で 3 ワードスキップして 0xf = 15 ワード
0x0a で現在のワードから(= 0 ワードスキップ)10 ワード見る。
0x00 = '¥0' で終端。
1 word = 4 byte = 32 bit で、オフセットが 4, 12, 16, 32-128 の位置のワードが表されている。
このメモリレイアウトに従ってメモリ領域を見ればオブジェクトの参照関係がわかる。
という感じかなあ。 Ivar は Instance Variable の略じゃないかと。
GC については最近出た本を参照。

868 名前:865 mailto:sage [2010/04/15(木) 20:40:07 ]
>>867
「ニブルの上位下位」のところがよく分からなかったんですが、なるほど、
そういう意味だったんですね。分からなかった「ニブル」の意味も何となく
分かりました。ありがとうございます。
もう一つお教えください。GC についてですが、最近新しい本が出たのでしょうか?

869 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 20:56:05 ]
> 868
byte : 8 bit
nibble: 4 bit

これはbyte -> bite (かじる)にひっかけて
「ちょこっとかじる」という意味のnibbleをbyteの半分を
指す様になった。 ほとんど冗談の様なネーミング。 


870 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:06:47 ]
じゃあニブルはニップルをかじってるのか

871 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:06:49 ]
英語版のwikipediaによると、bite->byteにひっかけて
nybbleとスペルしたり、かならずしも4bitではなくて
5bitや6bitに使われた場合もあったそうだ。 また、
用語の起源はIBMのメインフレームらしい。

en.wikipedia.org/wiki/Nibble


872 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:09:17 ]
byte -> bite じゃなくて
bite -> byte だよね
bite が byte の語源

873 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:13:07 ]
継手のニップルってそのまま形から来てるのか

874 名前:865 mailto:sage [2010/04/15(木) 21:14:47 ]
>>869
レスありがとうございます。
その話、何かで見たことがありました!完全に忘れていましたが・・・
おかげでもう忘れない気がします(笑)

875 名前:865 mailto:sage [2010/04/15(木) 21:16:46 ]
あれ、書いてるうちに… みなさん、ありがとう。



876 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:49:00 ]
>>868
GC の本っていうのは ttp://www.amazon.co.jp/dp/4798025623 のこと
オブジェクトの参照関係が GC でどう使われるかに興味があるんだったら
読んでみるといいかもしれない

ところで byte = 8bit じゃない計算機もあったよね
そのために 8bit を明示するときは octet と言ったり

877 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 13:30:37 ]
ちくびと聞いて

878 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 13:04:34 ]
+(void)hoge;

じゃなくて
+hoge;
って宣言を見かけたんだが、これはなんだ?

879 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 13:16:13 ]
int hoge;

880 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 15:17:16 ]
+ (id)hoge;
だよ。

881 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 21:32:43 ]
hage

882 名前:865 mailto:sage [2010/04/19(月) 09:30:11 ]
>>876
カメレスでごめんなさい。本の情報ありがとうございます、手に入れて読んでみます。

883 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 22:04:45 ]
@interface MyObject : NSObject
+ (void)hoge;
- (void)piyo;
@end
@implementation MyObject
+ (void)hoge { NSLog(@"hoge");}
- (void)piyo { NSLog(@"piyo");}
@end

@interface MyMyObject : MyObject
@end
@implementation MyMyObject
+ (void)hoge { NSLog(@"hogehoge");}
- (void)piyo { NSLog(@"piyopiyo");}
@end

@interface MyMyMyObject : MyMyObject
@end

となってて、MyMyMyObject で祖父クラスのメソッドを呼ぶ時って、
@implementation MyMyMyObject
クラスメソッドの場合はコレで良いとして、
+ (void)hoge {
[[[self superclass] superclass] hoge];
}
インスタンスメソッドの場合は、IMP取得くらいしかないのかね?
- (void)piyo {
IMP imp = class_getMethodImplementation([[self superclass] superclass], _cmd);
(*imp)(self, _cmd);
}
@end
supersuper とか無いし。

884 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:24:01 ]
>>883
親でover-rideされてるにも関わらず祖父を直接見るなんて、そもそもの設計が大間違いなのでは?
と Obj-C 初心者が言ってみる。

885 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:40:05 ]
メッセージングでやる場合。
- (void) piyo {
struct objc_super superSuper = {self, [[self superclass] superclass]};
objc_msgSendSuper(&superSuper, _cmd);
}
あとは、class_replaceMthod 等でメソッド入れ替えなども可。



886 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:46:27 ]
[[self superclass] superclass]とかやると、
MyMyMyObjectのさらにサブクラスを作ったときにハマるな。

887 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:42:25 ]
[self superclass] == [super superclass] であることを知って驚いた14の春

888 名前:デフォルトの名無しさん [2010/05/01(土) 11:17:15 ]
 

889 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:55:50 ]
>>887
ほんとだ。なんでこうなるの?

890 名前:デフォルトの名無しさん [2010/05/01(土) 20:43:49 ]
superclassメソッドをサブクラスでオーバーライドしないかぎり、[self superclass]とやっても、[super superclass]とやっても、呼び出されるメソッドは同じ。
さらに、[self superclass]も[super superclass]も、レシーバーはselfになる。
詳しくは、Objective-Cのruntime APIを見てください。

891 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2010/05/06(木) 17:31:55 ]
>>883
祖父クラスが基本的なメソッドを提供していて、子クラスでオーバーライドしたんだけど
孫からも基本的な処理へのアクセスが必要だというような場合は祖父クラスで hoge を
basicHoge として別名でも提供しておくという Smalltalk 流の作法で済ませられない?

892 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 00:40:25 ]
スレ違いかもしれませんが質問ですm(_ _)m

NSData型の変数に4バイト、例えば
0x00 0x00 0x00 0x7F
と入ってる場合、これをInt型の127に変換するには
どうすればいいのでしょうか?

893 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 01:37:17 ]
int a = CFSwapInt16(*(SInt32*)[data byte]);

894 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 01:39:00 ]
ミスった

895 名前:892 mailto:sage [2010/05/09(日) 12:02:34 ]
回答&ヒントありがとうございます。
int a = CFSwapInt32HostToLittle(*(SInt32*)[data bytes]);
で、まだ意味はぼんやりとしか分かってないですが、
無事期待の動作が得られました。



896 名前:デフォルトの名無しさん [2010/05/18(火) 10:45:41 ]
質問です。iPhone用プログラムを書いていますが。

NSInteger index = random() % count;
NSInteger index2 = random() % count;
while(index2 == index) {//同じにならないように
NSInteger index2 = random() % count;
}

とやって、二種類のランダムな数字を発生させようとしていますが、
何度かランダム数を発生させるとプログラムがストップしてしまいます。
なにがいけないのでしょうか。どなたかご教授願います。


897 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 10:55:35 ]
NSInteger index = random() % count;
NSInteger index2 = random() % count;
while(index2 == index) {//同じにならないように
NSInteger index2 = random() % count; // このindex2と前のindex2は別物
}


一つ目のindex2と二つ目のindex2は別物です。 


while(index2 == index) {//同じにならないように
 index2 = random() % count; // 宣言しない
}

としてください。


// 変数が隠されてしまっている とか警告出ませんでした?

// 変数スコープとかその辺の話も調べてね

898 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 10:55:36 ]
日本の未来が心配です。

899 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:06:39 ]
あまりにもあんまりな問いで最初何が駄目なのかわからなかった

900 名前:896 mailto:sage [2010/05/18(火) 11:35:51 ]
>>897
うぉぉ、当たり前ですよね。コピペしてたのが間違いでした。
ホントにあんまりな質問に回答して頂き、ありがとうございました。感謝感激です。
あ〜恥ずかしい。

901 名前:デフォルトの名無しさん [2010/05/18(火) 14:20:24 ]
すみません、質問させてください。
iPhone用アプリのプログラムを最近始めた初心者です。
<質問>
iPhoneから外部DB(postgreSQL)に接続する手法がわかりません。

色々調べましたがピンと来なかったのですが、Object-Cから直接DBConnect
するような方法は無いのでしょうか?
XCode自体、初心者なのでよくわからないのですが、
1. Ruby?を利用する
2. java+JDBCを利用する
のような感じになるのでしょうか。
ヒントだけでも教えていただけたら助かります。
宜しくお願い致します。

902 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 14:46:11 ]
ググレカス

903 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:11:38 ]
この質問前どっかで見た気がする

904 名前:デフォルトの名無しさん [2010/05/18(火) 17:10:02 ]
質問です。
UIScrollViewで画面より大きい画像を表示しているとき、画面に写っているのは、
ScrollView上でどの位置(座標)なのかを取得するにはどうしたら良いでしょう?
検索をしても、タッチした座標の検出しかわかりませんでした。
よろしくお願いします。


905 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 17:31:23 ]
スレチ。



906 名前:デフォルトの名無しさん [2010/05/21(金) 15:12:54 ]
基本的なことなのですが、いろいろ調べてもわからなかったので質問させてください。
あるファイル(A.m)から、別のファイル(B.m)のクラス( -(void)test{...} )にアクセス
するにはどうしたら良いのでしょうか?
B.hをA.mにimportして、A.m内で[self test]とやってみましたが、警告が出てうまく
ビルドできませんでした。
低レベルな質問ではありますが、よろしくお願いします。


907 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 15:35:06 ]
>>906
自分も初心者だけど、A.m内でBのインスタンスを作ってないんじゃ?
A.m内で[self test]ってしても、selfはAのインスタンス自身を参照するよ。
testメソッド(objCはメッセージだっけ?)を持っているのがBのインスタンスだからできないんじゃないかな。

908 名前:906 mailto:sage [2010/05/21(金) 15:47:12 ]
>>907
ありがとうございます。できました。
今まで何となく使ってた、selfの意味をようやく理解しました。


909 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:47:32 ]
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
@try {
ここで例外発生。
}
@catch (NSException * e) {
NSLog(@"%@ @catch in %@", e, NSStringFromSelector(_cmd));
@throw;
}
@finally {
[pool release];
}

で、上位のレベルで例外を受ける時、例外は pool に登録されるせいで、@finally 中の [pool release]; で解放されちゃって、
上位のレベルで例外を触るとバッド・アクセスになる。

例外発生時に pool がメモリリークするから @finally に入れたのだが、逆にこんな問題が出てくるとは。
NSAutoreleasePool を作らないという選択肢以外に、何かリークしない上手い対処法無いかな?
@throw; しないで、上位には NSError で渡すとか考えてるけど。

例外処理とか今まで殆ど触ったこと無いから、勝手が分からない。

910 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 00:07:47 ]
>>909
例外処理に悩むならException Programming Topics for Cocoa
くらいは嫁。その中の
Exception Handling and Memory Managementに、まさしく
あなたが悩んでいることについて書いてある。ピックアップすると

The simplest is to refrain from releasing local autorelease pools in @finally blocks
もっとも簡単な方法はfinalyブロックでローカルなプールを使うなってこと。

911 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 00:18:05 ]
>>910
申し訳ない。その辺の文章は全て和訳されてるとばかり。

developer.apple.com/mac/library/documentation/cocoa/conceptual/Exceptions/Tasks/HandlingExceptions.html
おお、素晴らしい。savedException を使います、成る程ね。

ありがとうございました。

912 名前:910 mailto:sage [2010/05/25(火) 00:22:43 ]
じゃあどこでpoolをreleaseするのか不安に思ってるかもしれないので、
追記。
Autorelease poolはスタック状のデータ構造になっていて、
最上位でないAutorelease poolが解放されると、それより上の
内側のpoolおよびそれに登録されたオブジェクトはリリースされる
(Memory Management Programming Guide for Cocoa;
Scope of Autorelease Pools and Implications of Nested Autorelease Pools 参照)
Cocoa/Objective-Cでinitとreleaseの対応は金科玉条 (破るとすなわちメモリリーク) だけど、autorelease pool自体はinitとreleaseが厳密に対応していなくても許容される…みたい。下層のpoolがreleaseされるのが前提だけど。

913 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:51:57 ]
@interface MyAutoreleasePool : NSObject {
NSAutoreleasePool *_pool;
NSPointerArray *_buf;
}
- (void)throwToOuterPool:(id)obj;
@end

@implementation MyAutoreleasePool
- (id)init {
self = [super init];
if (self) {
_pool = [[NSAutoreleasePool alloc] init];
_buf = [[NSPointerArray alloc] initWithOptions: NSPointerFunctionsZeroingWeakMemory];
}
return self;
}

- (void)throwToOuterPool:(id)obj {
[_buf addPointer: [obj retain]];
}

- (void)dealloc {
[_pool release];
for (id obj in _buf) [obj autorelease];
[_buf release];
[super dealloc];
}
@end

こんなん作って、@catch 中で [pool throwToOuterPool: e]; するコトにしたよ。

914 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 20:50:57 ]
Objective-Cの逆コンパイラってありますか?

915 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:14:33 ]
何悪いこと企んでるんだ?



916 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 10:14:52 ]
今月で販売が終了してしまうプリンタのドライバを逆コンパイルしたい。

917 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 13:42:00 ]
Objective-CってコンパイルしちゃうとCと区別付かないよね
Objective-C特有の関数呼び出しが多数現れるけど

918 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:00:29 ]
ObjC で書かれたドライバなんてあるの…

919 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:27:40 ]
馬鹿はレスしなくていいです

920 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 19:56:19 ]
>>917
ObjC 特有の関数呼び出しが多数現れるから、コンパイルしても C と区別付くよ。

921 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 20:44:33 ]
>>920
そうじゃなくて、>914へのヒントだよ

922 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 20:46:36 ]
ObjC のメッセージ呼び出しを解釈するデコンパイラが有っても良いと思うよ?

923 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 22:12:38 ]
code-dump.sourceforge.net/

924 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 02:21:48 ]
今まで色々書いてきて萩原本の内容を一通り制覇したけど、「分散オブジェクト」だけは未だどう利用すればいいのか分からない。
どういう処理に使ったとか、実践的・実用的な利用例があったら教えてくれ。

925 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 02:22:16 ]
経験談とか。



926 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:32:29 ]
すでにコンパイルされたiPhoneのアプリを
c#のように解析することはできますか?

927 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:04:48 ]
>>926
>c#のように

具体的に何がしたいの?

928 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:54:53 ]
>>927
ソースみて参考にしたいのです
特に規約とかないようなので

929 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:05:25 ]
Objective-C なら結構動的に動いてる部分があるので
逆コンパイルもそれなりな形にできそうだけど
いかんせん逆コンパイラが作られるほど有名な言語でもないというのが

930 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:07:21 ]
>>928
デコンパイルしたいってことか。
残念ながら iPhone アプリのデコンパイラは知りません。
アプリの動きを知りたいなら、Instruments でカスタム
DTrace スクリプトを書くのが一番良いと思います。

931 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:18:44 ]
>>928
コーディング規約なら一応あるよ。

Coding Guidelines for Cocoa
developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

あと、 /Developer/Examples の中にサンプルソース(TextEditとか)が
入っているので、参考になるかもよ。

932 名前:931 mailto:sage [2010/06/06(日) 15:20:47 ]
Cocoaスレと間違えた。めんご

933 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:42:47 ]
規約がないってのは
リバースエンジニアリングを禁止する規約がないって意味でしょ

934 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:10:28 ]
見落としてるだけだろ

935 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:38:46 ]
いや、パクる気満々だな



936 名前:デフォルトの名無しさん [2010/06/08(火) 07:45:09 ]
いえ、解析してそのゲームでチートしようと思ってます

937 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 08:02:20 ]
ageんな死ね。

938 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:25:24 ]
Objective-Cでは、厳密にprivateやpublicと明示的に記述し、スコープ分けしないのでしょうか?
入門書を何冊か読んだのですが、どれもインスタンス変数のスコープ分けをしていないので、気になっています。

939 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:27:26 ]

@interface AClass : NSObject
{

940 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 17:01:09 ]
そのあたりに言及してるのは荻原本ぐらいじゃないかな

941 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 17:26:05 ]
@privateでもKVCとかでアクセスできるし
プライベートであるという表明だけは出来るけど
静的チェックは甘いよね。

942 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:11:59 ]
>>940-941
ありがとうございます。
自分はJavaやってから始めたので、クラス内でしか使わない変数を隠蔽していないと
どうも気になってしまって…。

荻原本は読みました。解説はしてるのですが、以降の章のサンプルコードでは積極的に
使ってませんよね。>>941さんがおっしゃるように、
「スコープ分けしてもKVCでどうせアクセスできるんだから、細かい事は気にすんな」
って事なのでしょうかね。

943 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:11:55 ]
表明するのは大事だよ

通常アクセスならエラーが出るし、
迂闊に触ってしまうことへの注意喚起も出来るから
それで慣れている人は続ける方がいいよ


Appleのやり方も色々だよね。
昔から有るクラスはコメントで「privateだ」って書いてあったり
idな型不明のオブジェクトに隠蔽したり
@privateで宣言したり。

944 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:06:02 ]
>>943
なるほど、ありがとうございます。
書いている方が安心できるので、書く事にします。
少しでも単純なバグを減らせるなら、これを書くぐらいなんとことないですしね。

id型で思い出しましたが、参考書はかなりid型を使っていますが、Objective-Cは動的型結合があるのでid型で書いた方が、何かと都合が良いのでしょうか。
「ここは絶対hoge型でしょう」みたいな箇所でid型を使うのは、Javaのような静的型付け言語に慣れ親しんでいた私の身には抵抗がありまして…。
「ごちゃごちゃ言う前に慣れろ」と言われれば、それまでなんですけど、ハイ…。

945 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:24:18 ]
荻原本持ってるなら64ページに静的な型について書いてあるよ。
「明確な指針はないので好きにすれば良い」みたいなことが書いてある。

俺はクラス型を指定すると、コンパイル時に警告を出してくれるメリットがある
のでどんどん使っていけば良いと思うよ。
ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて
id型になっているということがJavaとは違うので注意。

id型の代わりにクラス型を指定したせいでデメリットが生まれることはあまり
ないと思われる。



946 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:35:23 ]
>>945
ありがとうございます。書いてました。申し訳無いです。

>ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて
>id型になっているということがJavaとは違うので注意。

この違いは大きいですね。注意します。ありがとうございました。

947 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:10:05 ]
>>943
WebViewはちょっと面白いよね。
@privateでWebViewPrivateクラスのインスタンス変数を持ってるだけだし、
WebViewPrivateクラスの実装とかはなぜかWebViewDataにある。


948 名前:デフォルトの名無しさん [2010/06/11(金) 16:03:43 ]
CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、
NSLog("%O", index);
としましたが、ポインタコンパチブルなんたらと怒られました。
何が間違っているのでしょうか?と質問しようとして、

よく見たら、1つ目の引数のポインタが型違うやんみたいなことを言われました。
NSLog(@"%O", index);
としたら、うまく行きました。自己解決しました。ありがとうございました。

以前にもこういうミスがありまして、こういうミス起きないようにするには
どうすればよいでしょうか。変な質問ですがよろしくお願いします。

949 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:50:47 ]
文字列の前には@を付けると頭に叩き込むしかないんじゃないかな。

950 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:30:49 ]
>>948
一度遭遇したエラーや警告を、その原因、対処方法とともに意識して憶えていく努力をする。

951 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:37:59 ]
次に948は、
CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、
printf(@"%O\n", index);
としましたが(ry

952 名前:948 [2010/06/12(土) 14:48:06 ]
みなさんアドバイスありがとうございます。

>>949
「あっと驚くNSString」これで頭に叩き込もうと思います。
頭に叩き込んでいたら怪我をしてしまいまして、これから病院に行ってきます。

>>950
そうですよね。がんばります。

>>951
次は無いようにしたいですね。

そこで新たな質問ですが、
NSLog(@@"%O", index);
のところでエラーが出ます。
原因はなんでしょうか?


953 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 14:56:21 ]
バカかお前は。

954 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 23:08:40 ]
バカの相手するのもなんなんだが、log って打って補完すれば NSLog(@""); って補完してくれて "" の中にキャレット動かしてくれるぞ

955 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 06:40:53 ]
>log って打って補完すれば NSLog(@"");

俺、べつのバカだけど、そうなんだ!べんりだなー



956 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:18:32 ]
すみません 非常に初歩的で申し訳ないんですが、iphone ipadのプログラムがしたいと思い、windowsに>>15
www.gnu.org/software/gnustep/experience/Windows.htmlの通りインストールしたんですが、shellのコマンドがわかりません

というかみなさんMACでやってるんですか?
iphone ipad の用プログラミングでvisual C++みたいなのありませんか?

957 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:21:02 ]
スレチ。というか Mac も持ってないのにコード書いても意味ないだろ。

958 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:30:07 ]
>>957
そうなんですか 初級過ぎてすみません><
アップル公式のSDKもよく見たらMAC限定みたいですね 出直してきます

959 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:44:33 ]
ちょっとわらった

960 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 09:45:40 ]
ttp://code.google.com/p/json-framework/wiki/InstallationInstructions

ここのOption 3を見ながらJSON-Frameworkを使ってMacアプリでテストを行おうとしているのですが、うまくいかずに困ってます。

フレームワークをプロジェクトに追加したので、3.までは終わってると思うのですが、
4の意味がわかりません。これは何をすれば良いのでしょうか?

961 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 10:31:17 ]
>>960
サイドバーの
「ターゲット」を展開→アプリ名になってる項目を右クリック→「追加」→「新規ビルドフェーズ」→「新規コピーファイル」
開いたパネルの「デスティネーション」を「フレームワーク」に設定
アプリ名の項目を展開→「ファイルをコピー」の上に JSON.framework をドロップ

962 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 10:34:45 ]
JSON.framework は実際のファイルではなくて
サイドバーの <プロジェクト名>/Frameworks 項目の中に入ってるやつ

963 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 11:07:33 ]
>>961-962
ありがとうございます。前進できました。
ビルドすると、JSON Frameworkのいくつかのファイルが見つからないというエラーが出ましたので、
私の設定のどこかがまずいのでしょう。
頑張って潰したいと思います。

964 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 18:46:22 ]
楽しいココアのレヴューにこういう↓のあったんだが、実際のところどう?
あと萩原本以外にいいのないですか?自分はCは中級くらいやれてます

*********************
Leopardにアップグレードしてしまった方、
この本は使えません。Xcode Toolに大幅な変更があったからです。
まだTigerを使っている方。この本は貴方のためのものです。
本の通り作業して行けばCocoaのいろはのい位まではモノになるはずです。

965 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 19:47:48 ]
スレチ。



966 名前:964 mailto:sage [2010/06/21(月) 20:09:39 ]
すみませんでした 新macのcocoaスレ行ってきます

967 名前:デフォルトの名無しさん [2010/06/24(木) 03:59:04 ]
yomi.bbspink.com/test/read.cgi/ascii2d/1275848135/225
採用

968 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:15:30 ]
codepad.org/H3j8eTAB

このコードで、どのNSLogも出力されないんだが何か間違ってる?
これじゃNSOperationQueueを使う意味がないのは承知の上。

969 名前:968 mailto:sage [2010/06/28(月) 17:59:49 ]
Appleで聞いてくる

970 名前:デフォルトの名無しさん [2010/06/29(火) 18:10:59 ]
 V V
(´・ω・`) うさちゃんピース

971 名前:デフォルトの名無しさん [2010/07/02(金) 05:44:56 ]
すみません。
1ヶ月未満の初心者なんですが、初歩的なことでつまずいています。

ヘッダファイルで

@interface PListReadViewController : UIViewController {
NSArray* persons;
}

@property(nonatomic,retain) NSArray* persons;

で、ソースファイルで

@synthesize persons;

-(void)hogehage{
NSBundle* bundle = [NSBundle mainBundle];
NSString* path = [bundle pathForResource:@"test" ofType:@"plist"];
NSArray* persons = [NSArray arrayWithContentsOfFile:path];
}

としてるんですが、hogehageのpersonsはローカル変数として扱われてしまうみたいですね。
interfaceで定義してるpersonsに、パッケージにバンドルされてるplistを配列として展開して、
別の関数内でpersonsを使いたいんですけど、どうしたらいいんでしょうか?

972 名前:971 mailto:sage [2010/07/02(金) 06:11:49 ]
できました!

ttp://www15.plala.or.jp/NovemberKou/programming/2ndGeneration/2ndHome/RMGWindowController/fixCrashDnD.html
を参考にしました。

NSArrayの使用サンプルはみんな、1関数内で処理が終了してるものばかりで、なかなか見つかりませんでした。

おじゃましました。

973 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 18:57:59 ]
[NSHoge hoge~~] ってのは自動で autorelease に登録されてると覚えよう。

974 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 20:38:07 ]
とは限らないけどね






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef