[表示 : 全て 最新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

549 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 22:34:08 ]
なんだこのゴミは

550 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 02:56:15 ]
>>549
まあまあ。将来有望な小学生が来たのかもしれんじゃないか。

>>548
で、その48は何で表されてんのかな?

551 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 04:40:12 ]
char c[128]={0};
c[0] = 48;
sprintf(c, "%c", 48);
NSString *nss = [[NSString alloc] initWithFormat:@"%c", 48];

552 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 06:05:21 ]
>>551
オイコラ、char c[128]ってどういうつもりだ。これだから最近の若いもんは・・・。

553 名前:デフォルトの名無しさん [2009/11/23(月) 06:29:27 ]
>>552
えっ、何かマズいっすかね・・・
自分まだ初めて2ヶ月くらいなんです・・・

554 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 07:34:23 ]
Mac関連スレってどこも変な物言いのおっさんばっかりなんだよな

555 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:34:48 ]
>>553
>>551の2行目のようにchar型のデータが欲しいだけなら何もすることは無いので char c; c = 48; で十分だ。
もし3行目のように文字列として扱いたい場合でも今の場合なら一文字目 '0' == 48 と二文字目の '\0'
の分だけなので char c[2]; でよい。
それにchar c[2] = {0} のように書いた場合、2要素目以降は言語仕様上不定(実装上はほぼ確実に0にセットされるが)。

556 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:36:27 ]
なんだそんな話か
char c[4096];
とか平気でやってるぞ

557 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 09:17:42 ]
なんと愚かな!



558 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 10:41:38 ]
>>555
なーるほど。そういうことなら問題なっすぃん。
なんか48 61 65 71みたいな数値を文字列に直すのかなーとか思って多めにとっただけっすぃん。

559 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 11:04:11 ]
>555
悪意がないことを先にいっておく
>char c[2] = {0} のように書いた場合、2要素目以降は言語仕様上不定
なる理由はどこから
気になったので、規格書があればそのセクションをお願いします

560 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 11:54:05 ]
>>559
俺も気になったんで見たんだけど、
C99?だと、静的変数と同様の暗黙の初期化になるみたい。
それ以前のは規格書が見れない。
www.jisc.go.jp/
JISX3010のPDF96ページ辺り。

561 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:36:40 ]
>560
確認しました
確かに静的記憶域と同じと書いてありますね

562 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:43:49 ]
American National Standard Programming Language C
3.5.7 Initialization
Semantics
If there are fewer initializers in a list than there are members of
an aggregate, the remainder of the aggregate shall be initialized
implicitly the same as objects that have static storage duration.

563 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 14:02:14 ]
おまいら静的変数と同じとか遠回しなこと言ってないで、
>>555 は間違いで
char c[2] = {0}の様に書いた場合 2 要素目以降は c 言語の
仕様として 0 にセットされる、とストレートに指摘しろyo

564 名前:555 mailto:sage [2009/11/25(水) 03:10:05 ]
いい加減なことをいってスマンカッタ。
ヽ(`Д´)ノ ウワァァァン
そんなこと言ったら厳密なObjective-Cの規格書なんて無いんだよう(グチグチ

565 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 03:10:53 ]
往生際悪すぎ

566 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 00:04:19 ]
とはいえ、身を委ねたくはない仕様だな。
明示的に初期化しておきたい。

567 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 00:30:36 ]
明示的に bzero() とか memset() すると冗長だと言って怒る人もいる(いた)から難しいね…



568 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 15:41:30 ]
こんな基本的な仕様を信用できないなら、ただの代入とかも信用ならんし
関数呼び出しなんて高度なものは余計使えないんじゃないか?

569 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:26:21 ]
コンパイラにバグがあったりするんだよ
そういう経験から、冗長かどうかはともかく
おまじないとして書いている処理というのはある

570 名前:デフォルトの名無しさん [2009/11/26(木) 18:28:35 ]
信用うんぬんじゃなくて、知らん人が多くて話がややこしくなるからだろ
みんな知ってりゃいいが >>567 みたいな理不尽なツッコミもありそうだし、
この流れみたいに話がこじれたらかなわん

571 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 20:48:17 ]
じゃ信用できるコンパイラ先輩が作ってくださいよwwwwww

ってやる夫顔で言ってやればいいんだよ

572 名前:デフォルトの名無しさん [2009/11/27(金) 10:52:05 ]
クラス名からそのクラスのインスタンスを生成するにはどうするんでしょうか?
クラスオブジェクトの生成は結構見つかるんですけど、
Class cls = NSClassFromString(@"anyClassName");
クラスのインスタンス自体を生成するやり方を教えてください。

出来ない言語もあるけど、objective-cはいかにも出来そうですよね?
お願いします

573 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 10:54:21 ]
そこまで来てればあとはコンドーム一枚だぞ

574 名前:572 [2009/11/27(金) 11:05:28 ]
>>573
あれ?もしかして
id obj = [[cls alloc] init];
でいいんですか?
NSLogでのぞくと出来てるっぽいです。

class_createInstanceというのも見つけたけど上ので良いのかな。

575 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:05:20 ]
いいんです。

576 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:57:42 ]
こんなのも

Class class = NSClassFromString(@"AnClass");
SEL sel = NSSelectorFromString(@"aSelector");
id obj = [[[class alloc] init] autorelease];
[obj performSelector:sel];


プラグイン書くときはNSClassFromStringは便利だよね。
わざわざバンドルローダー指定する必要ないし。
NSSelectorFromStringの方はごくまれにしか使わないね。
AppleEventDispatchの実装部では使いまくってそうだけど。

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;
}






[ 続きを読む ] / [ 携帯版 ]

前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