08/07/07 00:08:08
>>356
単に hoge は self->hoge と同等。
358:デフォルトの名無しさん
08/07/07 08:07:57
ありがとうございます。
自分のプロパティへのアクセスにはself.が必須なんですね。
359:デフォルトの名無しさん
08/07/07 08:58:18
単に hoge だけでプロパティにアクセスされては、
Obj-C 1.0 のコードを 2.0 でコンパイルするとひどいことになるよ。
Obj-C 1.0 では手で
-(id) hage
{
return hage;
}
とか書いていたのと、
Obj-C 2.0 で obj.hage というのは、@property 定義がなくとも
[obj hage] と等価 (ただしくは [obj objectForKey:@"hage"] だけど)
だということをかんがえると、
もしインスタンスメソッド内で hage と書くのが self.hage という意味にしてしまうと、上記アクセッサで無限ループになります。
360:デフォルトの名無しさん
08/07/07 11:15:42
ちなみに展開したのってどやってみるの?
361:デフォルトの名無しさん
08/07/07 13:16:46
何を展開する話をしてるの ?
362:デフォルトの名無しさん
08/07/07 14:35:16
>>361
ObjCのコードじゃない?
それなら objc の -C オプションを付ければ拡張子が .i のファイルに
C のコードに展開された ObjC のコードが見られるよ。
363:デフォルトの名無しさん
08/07/07 19:13:49
>>359
id a = obj.hage;
って、
id a = [obj hage];
じゃなくて、
id a = [obj objectForKey:@"hage"];
になるの?
364:デフォルトの名無しさん
08/07/07 23:01:20
ごめん、objectForKey: じゃなくて、valueForKey: だった。
URLリンク(developer.apple.com)
とか
URLリンク(developer.apple.com)
参照。単に setHage:, hage: じゃなくて、KVC されます。
一般に、[obj valueForKey:@"aho"] とすると、
Objc-C ランタイムは aho: , getAho: isAho: というメソッドを探した後、
_aho, _isAho, aho, isAho というインスタンス変数を探します。
だから、obj.aho でも、それだけの候補が探されます。
毎回こんなことやってると遅くてかないませんが、裏でキャッシュしているらしいです。
基本的に、self.aho だとバインディングが動く、self->aho だと動かないということです。
365:デフォルトの名無しさん
08/07/07 23:10:17
>>364
そういう話じゃなくて、、、
プロパティーって、Objective-C2.0が持ってる機能でしょ?
なぜ、そこでvalueForKey:などの、Cocoaフレームワークのメソッドが出てくるのでしょう?
gccなどのコンパイラが、Cocoaに依存したコードを出力するとは思えないのだが。
リンク先のページにも、そんな事書いてないし。
366:デフォルトの名無しさん
08/07/07 23:17:43
valueForKey:をCocoa特有のメソッドだという考えをまず捨てねば。
allocやinitだってCocoa特有でないのと一緒。
finalizeが良い例。
367:デフォルトの名無しさん
08/07/07 23:27:25
まあ実際はこうなんだけど
Key-value coding and declared properties are orthogonal technologies. You
can use KVC whether or not you use properties, and you can use properties
whether or not you use KVC. Both, though, make use of a "dot syntax". In
the case of KVC, the syntax is used to delimit elements in a key path. It
is important to remember that when you directly access a property using the
dot syntax, you invoke the receiver's standard accessor methods (as a
corollary, to emphasize, the dot syntax does not result in invocation of KVC
methods valueForKey: or setValue:forKey:).
368:デフォルトの名無しさん
08/07/07 23:56:53
>>366
言っていることが、変だよ。
alloc、init、finalizeは、普通にObjective-C言語の一部として定義されてるメソッドです。
逆に、valueForKeyはObjective-Cの一部として定義されていません。
一緒にしてはいけません。
>>367が書いてるとおり、id a = obj.hage; は、id a = [obj hage]; とコンパイルされるよ。
ちなみに英文の日本語訳は、これ↓
URLリンク(developer.apple.com)
369:デフォルトの名無しさん
08/07/08 00:00:35
>>368
> alloc、init、finalizeは、普通にObjective-C言語の一部として定義されてるメソッドです。
日本語でおk
370:デフォルトの名無しさん
08/07/08 00:47:08
↑おまえはまずは日本語を勉強した方がいいんじゃないか?
371:デフォルトの名無しさん
08/07/08 08:13:14
364 ですが、嘘を言ってすいませんでした。
どこまでが Obj-C 2.0の機能かというのは、
Apple 版 GCC 以外に Obj-C 2.0 をまともにコンパイルできるのがないので考えても仕方がないのでは?
NSFastEnumeration とかはどう思うの?
372:デフォルトの名無しさん
08/07/08 08:45:22
嘘つきはお断り
373:デフォルトの名無しさん
08/07/08 18:03:58
alloc init が Objective-C言語の一部として定義されてるメソッドと断定している理由は何?
374:デフォルトの名無しさん
08/07/08 21:07:27
NSFastEnumerationは、それに関連して文法が拡張されてるぐらいだから、ObjC2.0の一部なんじゃない?
あと、インスタンスを生成するときは、[[MyClass alloc] init]ってやるって、決まってるし。これは、Cocoaだからじゃなくて、ObjCだからそういう仕様になってるんです。これらのメソッドは、Objectクラスにも定義されてるし。
>Apple 版 GCC 以外に Obj-C 2.0 をまともにコンパイルできるのがないので考えても仕方がないのでは?
そういう部分もあるけど、Foudationフレームワーク全体がObjCだっていう訳でもないと思うけど。
375:デフォルトの名無しさん
08/07/08 22:08:59
>>373
それ外したら言語機能の範囲内でオブジェクトが作れなくなってしまわないか。
ANSI-Cみたいな規格がなくて(ないの?)断定は出来んのかもしれんが、alloc
init が言語の一部じゃないってのは考えにくいなぁ。それとも俺が無知なだけ
で言語が定める正統なオブジェクトの作り方が他にあるのかな。
376:デフォルトの名無しさん
08/07/08 22:24:16
Mac OSXのオブジェクトは、フツーにC言語なCore Foundationで表現されてたかと。
ANSIとかどうでもいいが、規格ある言語をラップして表現する方向で統一してるね
CF自体はwin/linux/fBSDにportingされてるし、Darwinコードにも各OSへのコントリビュータの名前が並んでたり
Cocoaもまた、結構CFをまんまラップして表現してるんだよね
Carbonとの基盤統一のためにやってる事なんだろうけど。
今のOSXではalloc/initは本質的にどっちで表現されてんだろな
377:デフォルトの名無しさん
08/07/08 22:44:33
OSObjectは?
378:デフォルトの名無しさん
08/07/08 22:52:08
>>374
そういう曖昧なものを定義としていいの?
>>376
それは実装の話で、規格の話じゃないでしょ?
>>375
だから、Obj-Cではそれすら実装依存なんでしょ?
379:デフォルトの名無しさん
08/07/08 23:03:30
>>378
>だから、Obj-Cではそれすら実装依存なんでしょ?
どのプラットホーム上でも、オブジェクトの生成にはalloc - initを使う。これが言語仕様だから。
逆に、alloc - init以外でオブジェクトを生成する実装ってあるの?
380:デフォルトの名無しさん
08/07/08 23:13:12
>>379
それが言語仕様だってどこに書いてるの?
ほかの実装がないから言語仕様なの?
381:デフォルトの名無しさん
08/07/08 23:39:51
なんだよ、おまえらココアで酔ったか?
382:デフォルトの名無しさん
08/07/08 23:42:10
そもそも言語仕様の規格とかないんだから現存する「特定の実装の言語仕様」しか
語ることができないような… 議論そのものがナンセンスじゃね?
383:デフォルトの名無しさん
08/07/08 23:58:59
しようがねえな
384:デフォルトの名無しさん
08/07/09 00:01:56
ところでこの議論の先には何があるんだ?
385:デフォルトの名無しさん
08/07/09 00:20:13
>>381
多分そうなんだと思う。
別に今更、Obj-CとApple独自の実装を分けて考えろとは思わないけどさ、
>alloc、init、finalizeは、普通にObjective-C言語の一部として定義されてるメソッドです。
>逆に、valueForKeyはObjective-Cの一部として定義されていません。
>一緒にしてはいけません。
とか言われるとちょっと意地悪してみたくなるじゃない?
君こそ一緒にしてるじゃん?て。
あまつさえ、
>NSFastEnumerationは、それに関連して文法が拡張されてるぐらいだから、ObjC2.0の一部なんじゃない?
>あと、インスタンスを生成するときは、[[MyClass alloc] init]ってやるって、決まってるし。これは、Cocoaだからじゃなくて、ObjCだからそういう仕様になってるんです。これらのメソッドは、Objectクラスにも定義されてるし。
なんて意味不明な事言い出す始末だし。
普通は規約が改定されたからそれにあわせてAppleはNSFastEnumerationを実装して対応した。
って考えるでしょ。
なんで、一部になっちゃうかな?
分けて考えるなら、徹底して分けて考えろって思う訳よ。
書いてるうちに、先書かれちゃった。
問題はそこなんだけどねw >382
ANSIかISOで管理してるって話も聞くんだけど、全く見当たらないんだな、これが。
URLリンク(developer.apple.com)
これだって、Apple実装を例にしたObjective-Cのお勉強資料だしね。
>>384
[self release]; // 自身の解放?
386:デフォルトの名無しさん
08/07/09 08:01:32
alloc, initで生成と初期化を行うのはただの慣習であってObjCの仕様じゃない。
逆にfinalizeやFast Enumeration系はランタイム側で定義された仕様。
387:デフォルトの名無しさん
08/07/09 08:21:00
ほんとつまんない事にこだわる奴らだな。
タクシーのエンジンの構造や燃料の効率について、なんも知らなくったって、
運転手さんに行き先を言えば望んだ場所に連れて行ってくれるというのに。
388:デフォルトの名無しさん
08/07/09 08:30:09
いや、一応ここ専門板だし。俺はもう寝るけど。
389:デフォルトの名無しさん
08/07/09 08:56:01
>>388
というか、ISO / ECMA 規格がないのにどこまでが言語でどこからがライブラリかという話をしても仕方がないのでは。
390:デフォルトの名無しさん
08/07/09 09:12:05
多分それでFAだろね
それ以上はAppleがどう認識してるか調べるくらいが関の山かと
391:デフォルトの名無しさん
08/07/09 13:01:36
コンパイラが認知する部分は言語仕様
ランタイムが認知する部分はランタイム仕様
コンパイラやランタイムを変えなくても変えられる部分は慣習・規約
392:デフォルトの名無しさん
08/07/09 13:31:57
じゃあ、コンパイラが
@"hogehoge"
でNSStringオブジェクト定数を生成してるわけだから、
NSStringは言語仕様に含まれてるんだ。
NSCFStringだと主張するならNSCFStringもまた言語使用に組み込まれている。
で、まだ続けるの?
もう不可分で良いじゃん。
393:デフォルトの名無しさん
08/07/09 14:09:41
そうだよ。java.lang.StringがJava言語、System.StringがC#と結びついているのと同じ。特別扱い。
394:デフォルトの名無しさん
08/07/09 14:22:09
「@"hogehoge"がNSStringだ」というのは言語仕様
NSStringの具体的な中身はライブラリの仕様
395:デフォルトの名無しさん
08/07/09 14:23:47
じゃあ、コンパイラの不可思議な動作も言語仕様のうちだ。
@"hoge" "fuga" @"hogera";
が正しく連結されたりね。
396:デフォルトの名無しさん
08/07/09 15:01:25
>>391
Obj-C のどこからどこまでが言語仕様かという話をするために、
>コンパイラが認知する部分は言語仕様
というわけだけど、
「コンパイラが認知する部分」は「言語仕様」という定義をしてるのは誰?
397:デフォルトの名無しさん
08/07/09 15:05:08
>>394
>@"hogehoge"がNSStringだ」というのは言語仕様
そうだったのかー。じゃあ GNU実装の gcc -fconstant-string-class オプションでの
文字列リテラルクラスの変更は言語仕様違反ですね…
-fconstant-string-classのデフォルトは NXConstantString だから変更しなくてもやっぱり
言語仕様違反ですか…GNUの実装はひどいですねー
# その言語仕様とやらがどこに存在してるのか知らんけどw
398:デフォルトの名無しさん
08/07/09 15:27:08
>>397
それは間違いでしょ?
だって、「コンパイラが認知する部分は言語仕様」とされている訳だから、
Apple拡張されていないgccのコンパイラが認知するものだって言語仕様だよ。
つまりObj-Cの言語仕様はコンパイラの数だけあるってことでしょ。
399:デフォルトの名無しさん
08/07/09 15:30:23
ほんとは実装依存って言うんだろうけど
皮肉に皮肉で返しあってgdgd
400:デフォルトの名無しさん
08/07/09 15:32:58
/ヽ /ヽ
/ ヽ / ヽ
______ / ヽ__/ ヽ
| ____ / :::::::::::::::\
| | // \ :::::::::::::::|
| | | ● ● ::::::::::::::| ・・・
| | .| :::::::::::::|
| | | (__人__丿 .....:::::::::::::::::::/
| |____ ヽ .....:::::::::::::::::::::::<
└___/ ̄ ̄ :::::::::::::::::::::::::|
|\ | :::::::::::::::::::::::|
\ \ \___ ::::::::::::::::::::::::|
401:デフォルトの名無しさん
08/07/09 15:44:38
>>398
>コンパイラの数
Obj-CのコンパイラってAppleのgcc,GNUのgccとPOCぐらいだろ
402:デフォルトの名無しさん
08/07/09 15:47:38
>>401
それに何の問題が?
403:デフォルトの名無しさん
08/07/09 16:44:53
しょうもない話題をいつまでひっぱってんだ
404:デフォルトの名無しさん
08/07/09 18:45:14
alloc と init がObjective-C 言語仕様に規定されているという人がいるからしようがない。
もしくは、
Objective-Cの言語仕様はそのコンパイラが規定すると言い張る人がいるからどうしようもない。
Objective-Cには公開された言語仕様が存在しない。
ってことをどうして認めようとはしないの?
それとも僕はとんでもない勘違いをしていて、
これこれは言語仕様と断言している人たちは、
非公開な言語仕様を閲覧できる立場の人たちなの?
405:デフォルトの名無しさん
08/07/09 19:08:29
標準規格がない言語には言語仕様がないと?
406:デフォルトの名無しさん
08/07/09 20:30:53
さすがにもう飽きてきた。w
>405
じゃあそれ、これこれは言語仕様です。これこれは違います。
って自信満々に言ってる人に言っといて。
標準がないのにそんな自信たっぷりに言われてもねぇ、って。
407:デフォルトの名無しさん
08/07/09 21:23:01
皆さん熱弁を振るってますが、
「どこからが美人でどこまでがブスか。」
という議論に近い不毛なものを感じますた。
以上、通りすがりの私の感想でした。
408:デフォルトの名無しさん
08/07/09 22:37:47
だよな
どこからAPIの機能でどこから言語の規格が議論して何か意味あるのかね。
C++でもAPIがなけりゃ文字列処理もでない屑言語だが
409:デフォルトの名無しさん
08/07/09 23:45:04
>>405
> 標準規格がない言語には言語仕様がないと?
そりゃ標準規格がない言語には、どこまでが標準言語仕様でどこからが標準ライブラリでどこからが独自ライブラリかの違いなんてないだろうよ
アホ?
410:デフォルトの名無しさん
08/07/10 00:14:55
標準ライブラリも含めて言語仕様でしょ
NSObjectがなければ何もできないんだから
411:デフォルトの名無しさん
08/07/10 00:23:09
「仕様」を「規約」と解釈する人と「実装の裏にある本質」と解釈する人が争ってる感じ
412:デフォルトの名無しさん
08/07/10 08:59:06
この流れは…iPhoneのお陰かな。
413:デフォルトの名無しさん
08/07/10 09:03:29
>>410
NS~は「de fact」標準ライブラリです。
414:デフォルトの名無しさん
08/07/10 09:11:29
>>413
de facto ですよ正しい綴りは。
415:デフォルトの名無しさん
08/07/10 09:15:43
>>414
どうも。
416:デフォルトの名無しさん
08/07/10 16:04:21
>>410
objc/Objectじゃだめですか><
417:デフォルトの名無しさん
08/07/10 17:17:44
>>411
仕様は仕様でしょ?
それがあって始めてApple方言とかGNU方言とか言える訳で。
一番近いのは、
URLリンク(developer.apple.com)
これ。文書全体じゃなくてこの章だけね。
>>412
おれは茶化してるだけのCocoaがなかったら死ぬタイプの人間ですw
418:デフォルトの名無しさん
08/07/10 17:33:50
URLリンク(developer.apple.com)
こっちもそうだった。
こっちはコンパイラのディレクティブのところにNSStringと明記されてる。
これが要求仕様なのかどうかは不明。
419:デフォルトの名無しさん
08/07/10 17:48:03
アップルは、Objective-CとCocoaを別々に開発している。
当然、仕様も別々に存在している。
特に、Objective-Cに関しては、Darwinプロジェクトの中で開発されているのだから、どこまでがObjective-Cなのかは明確になっているんじゃないのか?
Objective-Cの仕様に合わせてCocoaを作る事はできても、Cocoaの仕様に合わせてObjective-Cを作ることはできないのだから。
420:デフォルトの名無しさん
08/07/10 23:13:07
>>419
アップルにしてみればObjective-Cの言語仕様とCocoaライブラリの境界をはっきりさせなくても別に困りはしないでしょ。OpenDarwinも終わっちゃったし。
>Objective-Cの仕様に合わせてCocoaを作る事はできても、Cocoaの仕様に合わせてObjective-Cを作ることはできないのだから。
Objective-C文字列リテラル、メッセージの転送、例外処理、@synchronized、ObjC 2.0のプロパティ、高速列挙。Cocoaを前提とした機能はずいぶんと追加されてるよ。
421:デフォルトの名無しさん
08/07/10 23:27:38
>当然、仕様も別々に存在している。
その自信はどこから来るわけ?
Apple 社員で社外秘の仕様をみられるというの?
社外秘の仕様があるばあいは社外の人には仕様はあることになるのないことになるの?
422:デフォルトの名無しさん
08/07/11 00:18:39
>>420
> アップルにしてみればObjective-Cの言語仕様とCocoaライブラリの境界をはっきりさせなくても別に困りはしないでしょ。
困ると思うよ。
「分割して統治せよ」って言葉聞いた事あるよね?
大規模なシステムを設計する場合は、全体が一枚岩のようになると、とても保守が面倒になるので、複数のコンポーネントに分割して管理するものなんだよ。
Cocoaだって、あえてAppKitとFoundationに分かれているのもそういった理由があるからだと思うよ。
NSStringがFoundation側で定義されていて、-[NSString drawAtPoint:withAttributes:]があえてAppKit側にカテゴリーを使って定義してあるのも、そういった理由があるからでしょう。
Objective-Cも同じようにCocoaから分割されていると思う。
423:デフォルトの名無しさん
08/07/11 00:48:59
Appleの場合、仕様はJobs(笑)ってのもあるから。
最近、GPGPUに興味を持ってるみたいだから、「Snow Leopard」公開後は新しい言語
「OpenCL(open computing language)」を使用するように仕様が変更されるかもしれない。
424:デフォルトの名無しさん
08/07/11 01:08:20
Rubyの仕様がまつもとひろゆきみたいなもんだね
425:デフォルトの名無しさん
08/07/11 02:25:22
Jobs本人がOpenCLについてなんか言及してるん?
426:デフォルトの名無しさん
08/07/11 02:26:24
>>422
システム全部大雑把でいいなんて書いてない。あくまで言語仕様とライブラリの境目の話。拡大解釈しないでおくれ。
>Objective-Cも同じようにCocoaから分割されていると思う。
文字列リテラルとかプロパティとか高速列挙とか、いろいろ挙げたのは無視?
Objective-Cの権利は全部アップルが持ってるし、自社OSのためにコンパイラもランタイムも開発してるんだから、Cocoa前提の機能を言語仕様に含めたほうがアップルにとって楽なこともあるでしょ。
427:デフォルトの名無しさん
08/07/11 07:42:15
文字リテラルもプロパティも高速列挙もCocoaなしで使えるし
428:デフォルトの名無しさん
08/07/11 09:37:12
>>423
>新しい言語
>新しい言語
>新しい言語
>新しい言語
>新しい言語
>新しい言語
>新しい言語
>新しい言語
429:デフォルトの名無しさん
08/07/11 12:05:41
まずは自分でコンパイラ程度を作れる技術をつけてからじゃないか?
言語仕様がどうとか言う奴は、どうせ素人だろw
430:デフォルトの名無しさん
08/07/11 12:57:08
コンパイラなんて、誰でも作れる基礎技術じゃん。
大学生が授業でやるくらいのはなし。
431:デフォルトの名無しさん
08/07/11 16:15:29
OpenCLってObjective-Cから簡単に呼び出せるなら問題ないんじゃね?
FFI(Foreign Function Interface)とか経由するのかな?
432:デフォルトの名無しさん
08/07/11 16:22:24
今議論している内容を小学生1年生でも分かるように
説明しなさい。
433:デフォルトの名無しさん
08/07/11 16:35:54
>>432
人にモノを頼むときにはそれなりのw
434:デフォルトの名無しさん
08/07/11 21:41:24
>>432
つくえの上にりんごが一つあります。
さて、このりんごはなぜここにあるのでしょう。
1.りんご農家のおじさんがりんごを育てたから
2.お母さんがかってきたから
3.まさしくんがつくえの上においたから
4.言語仕様
5.苺も食べずにりんごとか素人だろw
435:デフォルトの名無しさん
08/07/12 00:46:40
>>434
私という自我がリンゴを個体としてのリンゴをそこに存在すると認識したからそこにあるのです。
436:デフォルトの名無しさん
08/07/12 01:21:47
>>434という他者が「そこにりんごが一つある」と主張
しているだけだから、正確には>>435は信用した上で認識「することにした」段階かと
437:デフォルトの名無しさん
08/07/12 16:26:01
みなさんは変態さんですか?
438:デフォルトの名無しさん
08/07/12 18:43:08
多態です。
439:デフォルトの名無しさん
08/07/12 23:30:11
>>431
URLリンク(www.apple.com)
>OpenCL is based on the C programming language and has been proposed as an open standard.
URLリンク(en.wikipedia.org)
>The initial OpenCL implementation is reportedly built on LLVM and Clang compiler technology.[citation needed]
参考になりそうなのは、これくらい。。。
440:デフォルトの名無しさん
08/07/13 04:38:19
OpenCLはCUDAらしい。CgではなくCUDAベースだから見かけほどC言語には似てない気がする。
441:デフォルトの名無しさん
08/07/13 17:09:50
Cocoaラッパ待ち
442:デフォルトの名無しさん
08/07/15 18:42:43
>>440
>OpenCLはCUDAらしい
らしいという話はよくでるんだが
ソースって見たことがないんだよな。
443:デフォルトの名無しさん
08/07/17 17:13:14
プログラム初心者がobjective-Cから入るのってマズい?
444:デフォルトの名無しさん
08/07/17 17:29:51
>>443
マズくはないけど資料は少ないから初心者にとっては最初の学習曲線が急勾配になってしまう。
JavaやC++で基本的なアルゴリズムやデザパタを学んだ方が資料が豊富だから楽に勉強できると思う。
ダイナミックな部分を勉強するにはSmalltalk(Squeak)が適している。あとRubyやPythonも。
そういったことを承知の上でどれで始めるのが良いかを選べばいいんじゃないかな。
あとは好みの問題。
445:デフォルトの名無しさん
08/07/17 17:30:36
>>443
あんまりまともなプログラムを書いた事のない俺が思う程度だけど、
他言語をちょっと囓っている+英語の情報も読んでいけるのならアリだと思う。
ただ、全く分からない人がいきなりObjective-Cからだと
・最近は増えてきたものの日本語の情報(Web&書籍)が少なめ。
・AppleのドキュメントもC言語の基礎知識とかを前提にしている感あり。
この辺でちと大変かも。
基本的には意欲だと思う。逆に言えば意欲が弱いとJavaだろうがC言語だろうがPHPだろうが関係なくだめだと思う。
ベストな環境はリアルでもメールでも掲示板でもいいけど疑問に答えて教えてもらえるような人間がいると覚えは早いと思う。
446:デフォルトの名無しさん
08/07/17 17:40:36
>>444
サンクス
各言語の違いが全くわからないのでググって検討してみます
C#よりC++の方がいいんですね
>>445
サンクス
意欲・・・きっかけがそもそもiPhoneという厨な理由だからどこまでいけるか
わかりませんが・・・
>AppleのドキュメントもC言語の基礎知識とかを前提にしている感あり
やっぱりC関連から入った方がいいのかもしれませんね
447:デフォルトの名無しさん
08/07/17 17:51:48
>>446
そういう動機であれば最初はRuby on RailsとかでWebアプリを作成してiPhoneから利用すれば簡単だと思う。
そういう資料はネット上に沢山転がってるからググって見るといいよ。
ある程度プログラミングに自信が付いてからObjective-Cに移行すればスムーズに学習できそう。
こういう順番でやれば、サーバーサイドとクライアントサイドの両方の知識が得られる。
両方の視点でプログラミングできればiPhoneに負荷をかけないプログラムを作成するノウハウも見つけられると思う。
448:デフォルトの名無しさん
08/07/17 18:22:14
>>447
ありがとう。なんて親切なんだ(つД`)・゚・
Ruby on Railsを調べてみます
449:デフォルトの名無しさん
08/07/17 18:46:27
ObjCの前にCはやっといた方が良いけど、C++は覚えなくてOK.
(C++専用のライブラリを使いたいのでもなければ)
C#はiPhoneでの開発には全く不要。
iPhone用プログラムならまずWebアプリから作ってみるというのには賛成。
PHPでベタ書きか、Python + DjangoかRurby + Railsあたりがおすすめ。
450:デフォルトの名無しさん
08/07/17 18:58:24
>>449
㌧クス。感涙で前が見えない。゚(゚´Д`゚)゜。
うーむ、C++でもC#でもなく初代Cがいいのか・・・
iPhone用ゲームの開発が主目的なんですが、やはりWebアプリから学んでいったほうが
いいんですかね?
451:デフォルトの名無しさん
08/07/17 19:21:49
明確にiPhone開発がしたいならObjCから始めるべきだと思う.
モチベーションは全てに優先するよ.
452:デフォルトの名無しさん
08/07/17 19:32:08
うむ、iPhone Application Tutorialからど~ぞ。
453:デフォルトの名無しさん
08/07/17 20:03:11
皆さんありがとう
明日Amazonから萩原本が届くのでとりあえず読んでみます(`・ω・´)
454:デフォルトの名無しさん
08/07/17 20:33:13
まてまて、荻原本はプログラミング初学者には敷居が高いぞ。
他言語でokなので、何かしらの入門本を読んでからの方が良いと思われ。
455:デフォルトの名無しさん
08/07/17 20:43:01
初めてで萩原本読むくらいなら、
英和辞書片手にヒレガス本第3版読んだ方が良さそうだな。
平易な文体だから高校生以上なら辞書なしでも
大体のフィーリングは掴めると思うし、スクリーンショットや挿し絵も多いしな。
456:デフォルトの名無しさん
08/07/17 20:46:52
>>454>>455
Σ (゚Д゚;)
そ、そうなのか・・・
では上で教えてもらったCとか、Ruby on Railsとかの入門書から挑戦してみます
ヒレガス本第3版というのも見てみます(洋書は気おくれしそうですが・・・)
ありがとう
ってか皆さん滅茶苦茶お詳しいっすね・・・(;´Д`)
457:デフォルトの名無しさん
08/07/17 20:50:31
個人的な趣味としてRubyと Railsを押すけど、webアプリを作って外部に公開する場合レンサバ借りるときにいろいろ困ることがあるよ。
英語が得意なら海外でRails向けのホスティングサービスがあるけどね。
iPhoneアプリを作りたい位だからLeopardユーザだと思うけど、
TextMateってテキストエディタをDLしてきて
p "Hello World"
って書いて拡張子を rb 保存して Command+Rをするだけで実行できて楽だと思う。
ってスレ違いになるからこのくらいにしておく。
その心意気はすばらしいけど、荻原本はまったくもってプログラミング初心者が読む本じゃないよ。
458:デフォルトの名無しさん
08/07/17 21:25:47
でもObjective-Cの仕様なんてCに毛が生えたようなもんだし、
Objective-Cの書籍として荻原本はベストな選択の一つなのは間違いない。
強いて言うなら、Cの入門書とCocoaフレームワークやInterface Builderに
ついての本を一冊ずつ買っとくといいと思う。
459:デフォルトの名無しさん
08/07/17 22:16:38
>>457
>>458
アドバイスサンクス
道は一本じゃなさそうなのでいろいろ齧ってみます
しかしプログラムの道は高く険しいなぁ・・・
460:デフォルトの名無しさん
08/07/17 23:21:38
>>459
あと、iPhone プログラムを突然はじめるより、いちど OS X 用の小さいプログラムを書いてから iPhone にいったほうがわかりやすいかもしれない。
大体構造いっしょだし、OS X 用プログラムの書き方のほうがネットに沢山ころがってます。
461:デフォルトの名無しさん
08/07/17 23:25:19
>うーむ、C++でもC#でもなく初代Cがいいのか・・・
Obj-C は C++ と同時期に(80年代) C から派生した言語なので、まあ並列だよ。
べつに C++ を勉強したから Obj-C がわかりやすいとかその逆ということではないです。
両方ともオブジェクト指向だけど、毛色が360度違います。
C# は Java のクローンだよね。Java 自体が C, Obj-C, C++ を参考に開発されたものだし。
462:デフォルトの名無しさん
08/07/17 23:49:02
C#、特にC# 3.0はJavaより強力な言語になってるよ。
ただ実質的に実行環境や開発環境がWindowsに限られるのが難。(Monoもあるけど)
MS製の環境にどっぷり浸かるならば良いとは思う。VS.Netも強力だし。
ただiPhoneの開発には使えないし、応用できるテクもおそらく無いw
463:デフォルトの名無しさん
08/07/17 23:53:15
勘違いさんいらっしゃーい >>462
はいさようなら。
464:デフォルトの名無しさん
08/07/17 23:55:19
>>460
>>461
>>462
俺みたいなクレクレ厨にここまで親切にアドバイスしてくれるなんて・・・
みんな優しいな。゚(゚´Д`゚)゜。
よその板なら「ググれやカス」で終わっても不思議じゃないのに・・・
ありがとう、このご恩は忘れませぬ ノシ
Windowsのゲーム作りならC#がいい、って聞いたことあるので
いつかC#も触ってみます
465:デフォルトの名無しさん
08/07/17 23:58:27
>>464
>このご恩は忘れませぬ
検討を祈る。成功したら後輩に優しくな!
466:デフォルトの名無しさん
08/07/17 23:59:10
自作er乙
467:デフォルトの名無しさん
08/07/18 00:14:15
iPhoneアプリに関しては正式に配布できるような形のプログラムのTipsとかは現時点ではNDAがあるからないに等しい。
Appleのサンプルプログラムくらいしかソースも読めない。
Objective-Cをやるなら
>>460が言うようにMacアプリからやった方が現時点ではいいだろうね。
468:デフォルトの名無しさん
08/07/18 13:19:01
Mac用だけどObjective-Cの入門記事です。
URLリンク(journal.mycom.co.jp)
469:デフォルトの名無しさん
08/07/18 13:36:38
Objective-CってVisitor Patternが使えないの?
470:デフォルトの名無しさん
08/07/18 18:39:27
え?
471:デフォルトの名無しさん
08/07/18 19:03:20
そもそも visitor pattern なんて使わないだろ
472:デフォルトの名無しさん
08/07/18 19:03:52
Visitor Patternを使うのに、何か問題でも?
473:デフォルトの名無しさん
08/07/18 20:49:15
Visitor Patternといえば木構造の処理系作成に使ったことがある。
でも、Objective-Cはメソッドオーバーロード出来ないから特殊な方法でやった。
普通の意味でならVisitor Patternが使えないのは本当。
474:デフォルトの名無しさん
08/07/18 21:05:42
Visitor Patternって、メソッドのオーバーロードができないと、実装できないんだっけ?
オーバーロードって、引数の型によって「静的に」同じ名前のメソッドを区別するためのものなんだから、プログラムの構造に影響しないように思えるけど。
単純に複数の名前のメソッドを使い分けるだけでは?
475:デフォルトの名無しさん
08/07/18 22:08:31
>単純に複数の名前のメソッドを使い分けるだけでは?
そんなメンテナンス性の悪いコーディングしてどうする
476:デフォルトの名無しさん
08/07/18 22:41:48
ようするに
void action(A obj)
void action(B obj)
と定義されていたものが、
void actionWithA(id obj)
void actionWithB(id obj)
となるだけだから、ソースコードの見た目の問題はあるけど、Visitor Patternが実装できない理由にはならないよね?
477:デフォルトの名無しさん
08/07/18 22:55:39
今帰宅
萩原本届いてた
ちょっと読んでみた
(´;ω;`) ・・・。
やっぱりCの入門書から読みます
>>467>>468
ありがとう
心折れかけたけど地道に頑張ります
478:デフォルトの名無しさん
08/07/18 23:13:32
>>477
まあプログラミングにも王道は無しだよ。あなたの今のように謙虚な気持ちを忘れなければきっとできるようになります。
あと、C のポインタのあたり、文字列操作の細かい話は
あまり勉強しなくても大丈夫なので読み飛ばしてください。
479:デフォルトの名無しさん
08/07/18 23:23:20
おいおい、ポインタはいるだろ。
Cocoaだって最近のAPIはNSError **が大量にあるだろ。
480:デフォルトの名無しさん
08/07/18 23:26:42
ポインタってみんなどういうところでつまづくの?
「変数を入れてるメモリエリアのアドレスを渡す。」
それ以上になにか必要か?
481:デフォルトの名無しさん
08/07/18 23:32:40
478 ですが、全然いらないというつもりはないんだけど。
>>480
さんの言ったことを言いたかったです。言葉が足りませんでした。
& と * はわかっておいたほうがいいけど、Objective-C ではそれで充分だよね。
malloc / free は要らないし、ポインタ演算 (足し算引き算) は要らないでしょ。
あと、配列は知らなくてもいいし、配列とポインタの等価性も要らないし、
文字列が char* 配列だということも知らなくてなんとかなるのでは。
482:デフォルトの名無しさん
08/07/18 23:56:38
>>476
>ソースコードの見た目の問題はあるけど、Visitor Patternが実装できない理由にはならないよね?
それで多重継承や多重ディスパッチを出来ると強弁するならご勝手にw
483:デフォルトの名無しさん
08/07/19 00:01:28
>>480
>配列とポインタの等価性
エキスパートC読んでこれが嘘だと理解した。こういうところに躓きの原因がある。>>481はわかっていない。
484:デフォルトの名無しさん
08/07/19 00:13:51
>>482
Obj-C は reflection があるから多重ディスパッチはむしろ実装しやすい気が ...
visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。
とわからない言葉をならべてみる
485:デフォルトの名無しさん
08/07/19 00:15:10
>エキスパートC読んでこれが嘘だと理解した。こういうところに躓きの原因がある。
いやまあ、Objective C スレとしては、そのへんでひっかかろうがひっかかるまいが
Objective C では必要ないよというので充分なのでは。
486:デフォルトの名無しさん
08/07/19 00:19:14
こういうスレで嘘は良くないのではないかい?
487:デフォルトの名無しさん
08/07/19 00:34:22
世の中には平気で嘘をつける人がいる。
嘘を指摘されるとそういうものは必要ないと言いだす。
そういう無反省な態度は無自覚に行われるから本人は嘘を良くないとは考えていない。
488:デフォルトの名無しさん
08/07/19 00:41:12
>>484
>visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。
ほんと馬鹿。逝ってよし。
489:デフォルトの名無しさん
08/07/19 01:09:23
481 ですが、嘘を付いてすいませんでした。
折角なので配列とポインタがどんなふうに違うかわかりやすく教えてください ...
490:デフォルトの名無しさん
08/07/19 01:18:07
URLリンク(www.cocoadev.com)
でも同じような議論になってる
491:デフォルトの名無しさん
08/07/19 01:48:48
>>364でも同じような議論になってる
嘘つきはお断り
492:デフォルトの名無しさん
08/07/19 01:52:06
>>489
C FAQ
493:デフォルトの名無しさん
08/07/19 03:46:16
>>489
ぐぐれカス
494:デフォルトの名無しさん
08/07/19 05:46:43
>>483
たしかにそうだ
なんとなく分かってるつもりでも
間違って覚えてるケースが結構ある
正しい理解が必要
495:デフォルトの名無しさん
08/07/19 06:28:26
嘘つき語録
>>474
Visitor Patternって、メソッドのオーバーロードができないと、実装できないんだっけ?
オーバーロードって、引数の型によって「静的に」同じ名前のメソッドを区別するためのものなんだから、プログラムの構造に影響しないように思えるけど。
単純に複数の名前のメソッドを使い分けるだけでは?
>>476
ようするに
void action(A obj)
void action(B obj)
と定義されていたものが、
void actionWithA(id obj)
void actionWithB(id obj)
となるだけだから、ソースコードの見た目の問題はあるけど、Visitor Patternが実装できない理由にはならないよね?
>>478
①C のポインタのあたり、②文字列操作の細かい話はあまり勉強しなくても大丈夫なので読み飛ばしてください。
>>481
③malloc / free は要らないし、④ポインタ演算 (足し算引き算) は要らないでしょ。
あと、⑤配列は知らなくてもいいし、⑥配列とポインタの等価性も要らないし、
⑦文字列が char* 配列だということも知らなくてなんとかなるのでは。
>>484
Obj-C は reflection があるから多重ディスパッチはむしろ実装しやすい気が ...
visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。
とわからない言葉をならべてみる
496:デフォルトの名無しさん
08/07/19 07:42:09
他はしらんが、C における文字列操作の細かい話は勉強しなくてもいいのは本当では?strstr とか知っててもしかたないよね。NSString でいいんじゃね?
497:デフォルトの名無しさん
08/07/19 09:19:11
いろいろな言語の文字列操作関数の比較表
Ruby, Python, JavaScript, Perl, C++
URLリンク(0xcc.net)
Ruby, PHP, Objective-C
URLリンク(d.hatena.ne.jp)
意外とObjective-Cも健闘してる希ガス。
実際にOpen環境(イワユル野良SDK)でのプログラミングが公開されているので以下に紹介する。
テキストエディタの作成のところでもNSStringを使ってる。
第1回:iPod touchにアプリケーションがインストールできる不思議
URLリンク(www.thinkit.co.jp)
第2回:iPod touchの自作アプリケーションが作れる&動かせる!
URLリンク(www.thinkit.co.jp)
第3回:iPod touchで動作するテキストエディタはこう作る!
URLリンク(www.thinkit.co.jp)
第4回:夢のオフラインRSSリーダを作ろう!
URLリンク(www.thinkit.co.jp)
498:デフォルトの名無しさん
08/07/19 09:27:53
実際のHello Worldプログラムを紹介する。(その1)
// hello.m
#import <UIKit/UIKit.h>
#import "HelloApplication.h"
int main(int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
return UIApplicationMain(argc, argv, [HelloApplication class]);
}
499:デフォルトの名無しさん
08/07/19 09:28:40
>>497
>実際にOpen環境(イワユル野良SDK)でのプログラミングが公開されているので以下に紹介する。
>テキストエディタの作成のところでもNSStringを使ってる。
べつに NSString の使い方を示すのなら
「実際に」iPhone じゃなくて「実際に」Mac / GnuStep でいいのでは...
500:デフォルトの名無しさん
08/07/19 09:28:56
(その2)
// HelloApplication.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <UIKit/UIApplication.h>
#import <UIKit/UIPushButton.h>
#import <UIKit/UITableCell.h>
#import <UIKit/UIImageAndTextTableCell.h>
@interface HelloApplication : UIApplication
{
UIImageAndTextTableCell *pbCell;
UITableCell *buttonCell;
}
@end
501:デフォルトの名無しさん
08/07/19 09:31:14
(その3)
// HelloApplication.m
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <UIKit/CDStructures.h>
#import <UIKit/UIPushButton.h>
#import <UIKit/UIThreePartButton.h>
#import <UIKit/UINavigationBar.h>
#import <UIKit/UIWindow.h>
#import <UIKit/UIView-Hierarchy.h>
#import <UIKit/UIHardware.h>
#import <UIKit/UITable.h>
#import <UIKit/UITableCell.h>
#import <UIKit/UITableColumn.h>
#import "HelloApplication.h"
@implementation HelloApplication
- (int) numberOfRowsInTable: (UITable *)table
{
return 2;
}
- (UITableCell *) table: (UITable *)table cellForRow: (int)row column: (int)col
{
return row ? buttonCell : pbCell;
}
502:デフォルトの名無しさん
08/07/19 09:33:15
(その4)
- (UITableCell *) table: (UITable *)table cellForRow: (int)row column: (int)col
reusing: (BOOL) reusing
{
return pbCell;
}
- (void) applicationDidFinishLaunching: (id) unused
{
UIWindow *window;
BOOL i = TRUE;
window = [[UIWindow alloc] initWithContentRect: [UIHardware
fullScreenApplicationContentRect]];
pbCell = [[UIImageAndTextTableCell alloc] init];
[pbCell setTitle: [NSString stringWithFormat:@"Hello World!"]];
UIPushButton *button = [[UIThreePartButton alloc] initWithTitle:
@"Touch Me"];
buttonCell = [[UITableCell alloc] init];
[buttonCell addSubview: button];
[button sizeToFit];
UITable *table = [[UITable alloc] initWithFrame: CGRectMake(0.0f, 48.0f, 320.0f, 480.0f - 16.0f - 32.0f)];
UITableColumn *col = [[UITableColumn alloc] initWithTitle: @"HelloApp" identifier: @"hello" width: 320.0f];
503:デフォルトの名無しさん
08/07/19 09:33:47
(その5)
[window orderFront: self];
[window makeKey: self];
[window _setHidden: NO];
[table addTableColumn: col];
[table setDataSource: self];
[table setDelegate: self];
[table reloadData];
UINavigationBar *nav = [[UINavigationBar alloc] initWithFrame: CGRectMake(
0.0f, 0.0f, 320.0f, 48.0f)];
[nav showButtonsWithLeftTitle: @"Foo" rightTitle: @"Bar" leftBack: YES];
[nav setBarStyle: 0];
struct CGRect rect = [UIHardware fullScreenApplicationContentRect];
rect.origin.x = rect.origin.y = 0.0f;
UIView *mainView;
mainView = [[UIView alloc] initWithFrame: rect];
[mainView addSubview: nav];
[mainView addSubview: table];
[window setContentView: mainView];
}
@end
504:デフォルトの名無しさん
08/07/19 10:10:59
勘違いさんいらっしゃーい >>499
はいさようなら。
505:デフォルトの名無しさん
08/07/19 12:04:42
POCはMacじゃ使えないんですか?
506:デフォルトの名無しさん
08/07/19 12:23:12
めずらしく伸びてると思ったらもう夏休みなんだな…
小中学生ばっかりか
507:デフォルトの名無しさん
08/07/19 12:25:50
Objective-Cは、文字列を`char *'型にするか、NSStringオブジェクトにするか選択できるハイブリッド型であるということが特徴です。
これがObjective-CのほうがSmalltalkより高速な理由です。
別な観点から言えば、 Objective-Cプログラムのすべての要素がオブジェクトで表現されていたとしたら、おそらくSmalltalkと同程度の速度であり、
Smalltalkが行なえる基本クラスへの最適化がないことで苦戦するでしょう。
つまり、文字列操作の細かい話は勉強しなくてもいいと言っている人はObjective-Cのメリットを全く理解していないんです。
508:デフォルトの名無しさん
08/07/19 12:27:01
>>506
ボクが小学生だからってバカにするオマエがバカ!
509:デフォルトの名無しさん
08/07/19 12:33:53
>>505
PoweMacのみ。IntelMacでは動かない。EtoileはIntelMacでも動くよ。
510:デフォルトの名無しさん
08/07/19 12:47:16
>>507
ええと、一応聞いておくけど、本気でそう思っているのか ?
おまえは全ての encoding に対応した文字列操作ルーチンを自分で書いて最適化できるのか ?
511:デフォルトの名無しさん
08/07/19 13:02:20
>おまえは全ての encoding に対応した文字列操作ルーチンを自分で書いて最適化できるのか ?
逆に質問しよう。なぜ、最適化という問題を持ち出したかと言えばオブジェクトのオーバーヘッドを理解しているからじゃないのか?
自分で最適化しないでも、問題を理解していれば、そういった処理を注意深く扱うようになる。それで速度的な問題を回避できるようになる。
512:デフォルトの名無しさん
08/07/19 13:12:05
近頃の人ってsprintfとか使わんの?
513:デフォルトの名無しさん
08/07/19 13:48:32
「文字列操作ルーチンを自分で書いて最適化できるのか ? 」って極端すぎるだろw
よっぽど悔しかったのかw
514:デフォルトの名無しさん
08/07/19 14:11:34
>>512
sprintfなんて使ってるやつはばかです
515:デフォルトの名無しさん
08/07/19 14:25:30
>>514
理路整然とした理由も述べないで否定するだけなら小学生でもできる。
まさか小学生じゃないよな?
sprintfとNSStringでの文字列操作の用例を挙げて比較したうえで
なぜsprintfを使うのがばかなのか述べてくれないかなぁ。
これは非常に興味深いテーマだ、>>514、君の意見が聞きたい。
516:デフォルトの名無しさん
08/07/19 14:37:03
sprintfのmanくらい読んでから質問してください
517:デフォルトの名無しさん
08/07/19 14:48:23
snprintfだろう常考
518:デフォルトの名無しさん
08/07/19 15:20:33
クズばっかだな
519:デフォルトの名無しさん
08/07/19 15:33:50
snprintf!!
wwww
現場を知らない廚はコレだから困る。
520:デフォルトの名無しさん
08/07/19 15:37:21
>>514の言い分けマダー?(゜∀゜)
521:デフォルトの名無しさん
08/07/19 16:30:50
わけけ?
522:デフォルトの名無しさん
08/07/19 16:52:33
>507
一行目は同感だけど、最終行は同意できない。
いまさら自力で文字列”操作”をする人はいないでしょ。
使うとしたら簡易パーサぐらいだろうけど、
それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。
それともこの程度のことも”操作”に入る?
NSLogは改行されるし、妙な出力が追加されるんで、fprintfを使うことは多いよね。
>>516
+[NSString stringWithFormat:format, ...] がsprintf相当だね。
523:デフォルトの名無しさん
08/07/19 17:07:54
>一行目は同感だけど、最終行は同意できない。
結局、全く理解してないことを指摘されて図星だったのかw
まともな反論も出来ないチンカスw
524:デフォルトの名無しさん
08/07/19 17:39:14
>いまさら自力で文字列”操作”をする人はいないでしょ。
>使うとしたら簡易パーサぐらいだろうけど、
>それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。
で、NSStringを使う利点まだぁ?チンチン
その程度でC言語の文字列操作の細かい話は勉強しなくてもいい理由だって主張してるの?
525:デフォルトの名無しさん
08/07/19 17:56:20
佐藤藍子 「NSStringさえあればもうNSStringC言語の文字列操作の細かい話は勉強しなくてもいいと思ってました」
526:デフォルトの名無しさん
08/07/19 18:27:42
ごめん。
人違いだわ、それ。
おれ、>522が初発言ね。
>NSStringを使う利点まだぁ?
楽だから。
べつにお勉強の為に文字列を操作するのは止めないけど、
お勉強以外であえて泥沼を選ぶ意図が俺には分からないね。
527:デフォルトの名無しさん
08/07/19 18:40:21
>>526
「>>514じゃないけど」ぐらいことわってから書くぐらいしろよ。
間違われても仕方ないだろ。
まぎらわしいぞw
528:デフォルトの名無しさん
08/07/19 19:02:20
ごめん。
ID無いの忘れてたんだよ。
529:デフォルトの名無しさん
08/07/20 01:14:12
外人さんがつくった Cocoa ソフトで日本語環境でつかうと
おかしくなるのがあって、ソースみて原因追及してみたら
内部でアルファベットだけと仮定して char* で操作してるところのせい
だったというのがあるので、char* のほうが速いかもしれませんが、
非日本人が使うかもしれないというのを考えて、
ShiftJIS / MacJapanese とかエンコーディングを仮定して
char* を操作するプログラムを書くのではなくて、
NSString (か他の国際化文字列ライブラリ)をつかって書くようにして
おいてくださると多分世界のどこかで誰かが助かります。
530:デフォルトの名無しさん
08/07/20 01:19:21
文字を右から左に書く言語も考慮して作れということか?
531:デフォルトの名無しさん
08/07/20 01:31:05
NSString (とかほかの国際化文字ライブラリ) をつかっておくと、
自分で考えなくても自動的にある程度は考慮されたことになるというのが利点。
Mail.app にイスラエル人の知り合いからメールがきて、
名前欄がちゃんとヘブライ語になってたので感心しました。
まあきっと外人さんには名前欄に漢字が出る時点でびっくりなんだろうけど。
海外製のフリーウェアシェアウェアでも Cocoa なら大抵は
日本語問題なくつかえるのは一貫して NSString つかってあるからで、
(というと言い過ぎだと思いますが、)
昔の Carbon のころはそうではなかったです。
メニューバーとかよく化けてたでしょ。
532:デフォルトの名無しさん
08/07/20 01:39:10
>>529
君のまだ知らない世界にはユニコードっていうものがあってな
533:デフォルトの名無しさん
08/07/20 02:09:08
>>532
個人が作るソフトにはUTF-8なcharとかwchar_tを使わずに
US-ASCIIかISO-8859-1前提でcharを使ってるのがままあるよ。
作者がUnicodeにする必要を感じてないから仕方ない。
Mac用のソフトだと素直にCocoaで作ればそんなことにはなりづらいけどね。
534:デフォルトの名無しさん
08/07/20 02:14:19
アホにわざわざ説明してやらんでも
535:デフォルトの名無しさん
08/07/20 02:16:53
>>522
>それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。
その辺に落ちてるのほとんどchar*になってるだろw
NSString使わない方が良いみたいに読めてしまうw
536:デフォルトの名無しさん
08/07/20 02:18:38
UTF-8NとUTF-8はちと違うし、UTF-16にもUTF-16Nがあるんだよな。
537:デフォルトの名無しさん
08/07/20 02:27:05
>>535
>それともこの程度のことも”操作”に入る?
も読んでね。
文字列を渡したり、もらったりも文字列操作に入れちゃうのか?
538:デフォルトの名無しさん
08/07/20 04:08:53
>>537
てかさぁ、ライブラリでパターンマッチングやバックトラッキング用のクラスを用意してその上に高級パーサとか正規表現ライブラリを構築してる例なんてあるの?
なかったらどのみちchar*を使うんだから勉強せざるを得ないんじゃないのか?
539:デフォルトの名無しさん
08/07/20 05:30:58
char *は使うよ。
でも、文字列は操作しないよ。
540:デフォルトの名無しさん
08/07/20 05:39:33
正規表現ならOgreKitがある
541:デフォルトの名無しさん
08/07/20 08:36:55
パーザをlex&yaccで作成するときにはまともなCの知識が必要だ。
上で言ってるObjective-Cの知識だけじゃどうにもならん場合はある。
542:デフォルトの名無しさん
08/07/20 09:02:36
そこまでする人間がまともなCの知識を持ってないというのも考えにくいような。
ちょっと凝ったことをするにはCで直に、あるいはObjCのラッパを書くことになるし
Objective-Cだけで開発するには限界があるのは同意。
543:デフォルトの名無しさん
08/07/20 10:04:26
ここで正規表現とか持ち出す奴っていったい何なの?
データベース使うJavaの人?BSDとかでスクリプト書いてる人?
文字列検索と文字列操作を美しく勘違いしてないかいw?
544:デフォルトの名無しさん
08/07/20 10:19:48
C言語の正規表現を使うにはregex.hをimportしてregcomp, regexec, regfree関数を利用する。
int regcomp(regex_t *preg, const char *regex, int cflags)
正規表現のコンパイルを行なう。コンパイル成功時には0を返す。
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
正規表現による検索を実行する。
void regfree(regex_t *preg)
正規表現パターンバッファを解放する。
545:デフォルトの名無しさん
08/07/20 10:28:06
>>544
通りすがりだが横から質問させて。
で?そのregcomp,regxec,regfree関数ってどういう時に使うの?
sprintfとかscanfとか上の方で出てたNSStringの文字列操作と置き換えられるものなのかな?
教えてエロい人!
546:デフォルトの名無しさん
08/07/20 10:31:02
OgreKitとregex.h。OgreKit遅いやん。
547:デフォルトの名無しさん
08/07/20 10:35:06
>>546
ネーネーregex、OregKitとかいうのとsprintfは同じ機能のものなの?
文字列操作の話で来ているのになんで「正規表現」て出てきてegex、OregKitなの?
ワカラナイ、ワカラナイ...
「お前が馬鹿だから」と言うの無しでちゃんと説明して!、初心者なので。
548:デフォルトの名無しさん
08/07/20 10:36:33
>>545
適当にググッた。嫁。サンプルコードだけ読めば簡単に分かる。
regex.h
URLリンク(memo.majide.com)
URLリンク(sometime.minidns.net)
reglib.c ・・・ regcomp,regxec,regfree関数を使って、regsplit, regreplace, regrpall, regcnt関数を構築してる例
URLリンク(sometime.minidns.net)
549:デフォルトの名無しさん
08/07/20 10:41:36
要するにプログラマは文字列操作をテーマとした意思の疎通も困難な程、コミュニケーション能力がないという事か。
sprintfに対してreglib使え?おいおい(w。
挙げ句は自分の言葉で説明できないからググッたコピペと来たよ。
これじゃプロジェクトが座礁してデスマーチにもなる罠。
550:デフォルトの名無しさん
08/07/20 10:42:11
>サンプルコードだけ読めば
いや、走らしてみろ。即分かる。
551:デフォルトの名無しさん
08/07/20 10:43:09
>>549
はいはい、ワロスワロスw
552:デフォルトの名無しさん
08/07/20 10:47:24
prm1という変数があってユーザーが入力した値を入れ、メッセージに表示する為の文字列を作りたいと思います。
例:"prm1は不正な入力です。"
sprintfではなくreglibで処理を行なうにはどのようにしたら良いでしょうか。
具体的なコードをここに書いてくださると助かります。
553:デフォルトの名無しさん
08/07/20 10:57:59
>>552のこうげき
「かいしんのいちげき!」
>>551の無能さが露呈した。
554:デフォルトの名無しさん
08/07/20 11:06:05
hoge.strings
"hoge"="%sは不正な入力です。";
hoge.m
...
id hoge = NSLocalizedStringFromTable(@"hoge", @"hoge", @"hoge");
hoge = [NSString stringWithFormat:hoge, prm1];
fprintf(strerr, "%s¥n", [hoge UTF8String]);
...
てか、文字列操作の細かい部分をchar *でするかどうかの話でしょ?
なんで話変わってんの?
555:デフォルトの名無しさん
08/07/20 11:06:47
>>549
>これじゃプロジェクトが座礁してデスマーチにもなる罠。
いやいや多分>>548はプログラマですらないからwww
iPhoneブームで注目度があがるの結構だけど、知ったかぶる廚も多くなるから嫌だね。
556:522
08/07/20 11:07:29
>>554 は俺ね。
また勘違いされる所だ(w
557:デフォルトの名無しさん
08/07/20 11:08:37
上でlex&yaccの話が出てたと思うけど、文字列操作は字句解析と構文解析のふたつで出来てることが多い。
lexは字句解析のことで、文字列を1文字づつ読み込んでトークン、つまり単語に切り分ける仕事をする。
yaccは構文解析のことで、得られたトークンの意味を推測して構文木を作成する。
で、得られた構文木を元にして文字列の意味を翻訳する。
正規表現は、 テキストの文字列に対してパターンマッチを行う強力な道具です。
TEXTファイル中からある単語を置換/検索するのもパターンマッチです。
例えばyaccを使わないで簡易にキーワード(文法上重要なトークン)を探したいときのパターンマッチを正規表現でやるとか出来ます。
regex、OregKitは正規表現プログラムなのでそういったことが簡単に出来ます。
int sprintf(char *str, const char *format, ... );
sprintfは書式formatにしたがって、printf関数と同様の変換を行った出力を、文字列strに格納します。使えるようになると凄く便利。
char *str : 変換した出力を格納する文字列。
const char *format : 書式指定文字列。
※ 要するに、正規表現は文字列のパターンマッチをするのに対して、sprintf関数は文字列を変換します。だから役割はちがう。
558:デフォルトの名無しさん
08/07/20 11:12:15
煽らないと会話してもらえない可愛そうな香具師なのかな?
559:デフォルトの名無しさん
08/07/20 11:14:45
あ、あと出来上がった構文木はバックトラッキング(深さ優先探索)を使って各ノードをトラバース(順次訪れる)します。
560:デフォルトの名無しさん
08/07/20 11:15:58
夏休みに入った途端に変な子が来たね
561:547
08/07/20 11:17:06
>>557
ありがとうございます!
regex,OregKitはsprintfとは使い道が違うものなのですね。
困ったさんのおかげであやうく誤った知識を覚えてしまうところでした。
562:デフォルトの名無しさん
08/07/20 11:21:49
例えば、Ruby on RailsみたいなWebアプリでやってるようなことをObjective-Cとかで実現したいとしよう。
プログラムには、字句解析と構文解析をする部分を作成してHTMLやXMLの中から必要な情報を抜き取る必要がある。
そういうときに、パターンマッチで必要な情報を見つける。そして、sprintf関数とかを使って適切な形に仕上げて表示させるという風に使用する。
563:デフォルトの名無しさん
08/07/20 11:28:39
XML なら素直に既存の XML parser 使うだろ、普通。
564:デフォルトの名無しさん
08/07/20 11:31:52
>>563
じゃ、解説して!
もう疲れてきた。適切な例を考えるのめんどい。
565:デフォルトの名無しさん
08/07/20 11:35:32
すまんが>>514が悪あがきしているようにしか見えない。>>564
566:デフォルトの名無しさん
08/07/20 11:37:47
>>514じゃないからw
むしろ>>553だろ
おれはちゃんと>>557を書いて説明した。>>514と言われるのは心外だ。
567:デフォルトの名無しさん
08/07/20 11:47:41
>>566
すまん。疑心暗鬼になってて。
568:デフォルトの名無しさん
08/07/20 12:00:36
lex&yacc⇔flex&bison
569:デフォルトの名無しさん
08/07/20 12:27:02
Obj-C 以外の話題で盛りあがるのはやめようよ ...
夏休みだから仕方がないのかな。
570:デフォルトの名無しさん
08/07/20 13:18:46
>>569
>夏休みだから仕方がないのかな。
>>495にあるように、この流れは君の嘘が元凶だったんだから反省してくれ
571:デフォルトの名無しさん
08/07/20 14:40:24
個人的にはOregKit意外にもCocoaOniguruma軽くて良い感じ。
572:デフォルトの名無しさん
08/07/21 00:32:36
>>495 にあげられてるのが全部同じ人だってのはどうしてわかったの?
もしかしてスーパーハッカー?
573:デフォルトの名無しさん
08/07/23 12:24:43
単に嘘ついてるのを並べ得たんじゃね
語録としてまとめるのは変だが
574:デフォルトの名無しさん
08/07/23 23:08:37
char* としての文字列の操作をしらなくても簡単な Cocoa プログラムは書けるというのは嘘ではないのでは ...
Apple としては C で書くときでも char* じゃなくて CFString つかってくれということだよね。
575:デフォルトの名無しさん
08/07/24 05:24:39
>Apple としては C で書くときでも char* じゃなくて CFString つかってくれということだよね。
はぁ?ばかじゃねぇの?
576:デフォルトの名無しさん
08/07/24 08:44:13
>はぁ?ばかじゃねぇの?
煽り煽られたいだけじゃなくて、ほんとにそう思ってるなら、
BSD の API じゃなくて Apple 製の C API で、
char* を受け取るものがどういうのがあるか反省してみてください
577:デフォルトの名無しさん
08/07/24 09:28:05
stringWithCString?
578:デフォルトの名無しさん
08/07/24 09:47:18
>>577
それを使うと"default encoding"が変わったときに
文字化けして死亡するので、使わないでね。というか deprecated in 10.4.
stringWithCString:encoding:
か
stringWithUTF8String:
を使ってください。お願いだから。
これだけのせいで動かない海外製のフリーウェアに何度も出会っているので ...
579:デフォルトの名無しさん
08/07/24 09:54:16
典型的には、OS X の日本語環境では MacJapanese が "default encoding" で、
こいつは円記号とバックスラッシュを区別するので、
海外製の Cocoa でつくったシェルスクリプトのラッパで
不用意に -stringWIthCString: と -cString で行ったり来たりすると
シェルスクリプト内に ASCII code でのバックスラッシュ(0x5c)が
あるべきところにMacJapanese の バックスラッシュ (0x80) が入って
スクリプトが動かなくなったりします ...
580:デフォルトの名無しさん
08/07/24 19:55:33
>>574, >>576
オマエの妄想をAppleが言ってるように言うな、この詐欺師が
581:デフォルトの名無しさん
08/07/24 21:01:18
でたでた
582:デフォルトの名無しさん
08/07/24 21:24:17
>>574
char* としての文字列の操作すら知らなかったら、ほんとに簡単なプログラムしか書けない、というのは嘘ではないよ。
583:デフォルトの名無しさん
08/07/24 23:09:04
>char* としての文字列の操作すら知らなかったら、ほんとに簡単なプログラムしか書けない、というのは嘘ではないよ。
まあそれはそうですね。
NSString のメソッドって一杯あるけどなんか微妙に足りないことがしばしば。
Perl/Ruby/Python みたいに
正規表現が標準でつかえればそんな問題もなくなるんだけど。
584:デフォルトの名無しさん
08/07/24 23:29:01
ねぇねぇ、なんでいきなりchar*を受け取る「API」の話になるの?このスレ。。
それともわざとか?
釣られた俺?
585:デフォルトの名無しさん
08/07/24 23:30:01
>>583
>Perl/Ruby/Python みたいに
>正規表現が標準でつかえればそんな問題もなくなるんだけど。
この人、また来てるのね。正規表現廚。
586:デフォルトの名無しさん
08/07/24 23:46:52
>>584
char*を入力したり出力したりするAPIが存在しなければ、char*を使う必要がない。と言いたいんじゃないの?
587:デフォルトの名無しさん
08/07/25 06:28:52
「char*を受け取るAPI」と「正規表現」にこだわる思考回路が理解できない件www
588:デフォルトの名無しさん
08/07/25 09:00:50
反抗期なんだろ。
589:デフォルトの名無しさん
08/07/25 09:12:03
ていうか普通 NSString なんか使わないだろ
590:デフォルトの名無しさん
08/07/25 15:16:41
>>574
>>576
>>578
>>579
>>583
591:デフォルトの名無しさん
08/07/25 17:08:20
NSString
NSAutoString
NSCString
NSIString
NSMutableString
NSAttributedString
・・・
592:デフォルトの名無しさん
08/07/25 20:07:49
Netscapeですか
593:デフォルトの名無しさん
08/07/26 07:19:51
Netscape
NetSTEP
NeXTSTEP
NeXTscape
・・・
594:デフォルトの名無しさん
08/07/26 08:21:40
ソープのゴム無し
595:デフォルトの名無しさん
08/07/26 09:41:26
バカ専用 普通 ハッカー ウィザード
┝ - - - - ┿━━┿━━┥
∩___∩ /)
| ノ ヽ ( i )))
/ ● ● | / /
| ( _●_) |ノ / 今はここら辺クマーー!!
彡、 |∪| ,/
/ ヽノ /
596:デフォルトの名無しさん
08/07/26 20:44:47
ゴメンずれてる
597:デフォルトの名無しさん
08/07/27 12:45:31
バカ専用 普通 ハッカー ウィザード
┝ - - - - ┿━━┿━━┥
∩___∩ /)
| ノ ヽ ( i )))
/ ● ● | / /
| ( _●_) |ノ / 今はここら辺クマーー!!
彡、 |∪| ,/
/ ヽノ /
598:デフォルトの名無しさん
08/07/27 17:39:05
ごめんずれてる
599:デフォルトの名無しさん
08/07/27 21:48:06
普通 まったり 超まったり dat落ち寸前
┝ - - - - ┿━━┿━━━┥
∩___∩ /)
600:デフォルトの名無しさん
08/07/29 19:06:09
"\psage"
601:sage
08/08/20 10:31:33
sage
602:デフォルトの名無しさん
08/08/21 05:21:02
すみません。教えてください。
a = [foo bar_A:[s get] B:[s get]];
というステートメントがありまして、いろいろ実験してみますと、
どうもB:[s get]がA:[s get]より先に実行されてるっぽいです。
どうしてなのか知りたいのですが。
603:デフォルトの名無しさん
08/08/21 06:02:59
引数の評価の順番って保証されてたっけ?
というか普通は保証されないから理由なんてないと思うよ
604:602
08/08/21 08:31:49
>>603
わかりました。ありがとう!
605:デフォルトの名無しさん
08/08/22 17:35:38
関数の引数をスタックに積んで渡す場合に逆順に積むと、
呼ばれた側で先頭から配列のようにアクセスできて楽だから。
606:デフォルトの名無しさん
08/08/22 23:33:22
>>605
それでいくと、IntelとPowerPCで動作が変わるのかな?
607:デフォルトの名無しさん
08/08/23 00:28:29
エンディアンは関係ないから・・・
608:デフォルトの名無しさん
08/08/23 03:40:36
PowerPCは引数をスタックに積まない。多くの場合は。
その前に、gccは実行効率優先でコードを生成するだろうから、引数のセットアップ順序もケースバイケースになりそうな気がする。
push命令使ってるわけでもないし
609:デフォルトの名無しさん
08/08/23 05:04:57
>>608
恥ずかし過ぎて、俺なら明日会社休んじゃう
610:デフォルトの名無しさん
08/08/23 05:30:37
>>609
土曜は休みだろ?
611:デフォルトの名無しさん
08/08/23 05:38:19
俺は仕事だけどな。
612:デフォルトの名無しさん
08/08/24 15:23:24
URLリンク(developer.apple.com)
613:デフォルトの名無しさん
08/08/28 02:10:01
この数レスに腹抱えて笑ってもた
614:デフォルトの名無しさん
08/08/28 02:28:21
あなたつかれてるのよ…
615:デフォルトの名無しさん
08/08/28 03:11:51
伝統的なアレだと、C式は後ろから積んで戻ってから呼び出し側がポップ。
Pascal式は前から積んで呼ばれた先でポップだった。
616:デフォルトの名無しさん
08/08/30 13:55:06
URLリンク(llvm.org)
よくわからん
617:デフォルトの名無しさん
08/09/08 15:59:01
「nul」を「にるぽ」と呼ぶスレ
618:デフォルトの名無しさん
08/09/08 19:07:19
>>617
nil じゃね?
619:デフォルトの名無しさん
08/09/08 19:19:35
うふふ。すごくにるにるしてるわヨ。
620:デフォルトの名無しさん
08/09/09 15:47:58
ににる にる にる ににるに~
ににる にる にる ににるに~
621:デフォルトの名無しさん
08/09/09 21:15:37
なあ、もうちょっとまじめにやらないか?
622:デフォルトの名無しさん
08/09/09 22:32:50
3時間後の発表でiPod全機種のOSがiPhoneに移行したらObjective-Cの仕事が激増するかな。
ローコストモデルでは通信できない可能性が高いからプログラマとしては魅力ないのかな?
もっともNDAがあるから職業プログラマは話せないと思うけど
623:デフォルトの名無しさん
08/09/09 22:52:44
iPhoneでファイルの読み書きってどうすんの?
NSDataオブジェクト作ってwriteToFileすりゃいいってのはなんとなくわかるんだけど…。
624:デフォルトの名無しさん
08/09/15 02:39:39
GNUStep の AppKit っていつから LGPL になったの?
以前は GPL だった気がするけど、勘違いかな...
625:デフォルトの名無しさん
08/09/15 20:58:09
まあ、LGPLのほうが使いやすいからいいじゃん
626:デフォルトの名無しさん
08/09/26 15:07:40
Unicodeで
\u3042\u3044\u3046
とエスケープされた文字を
あいう
と変換する方法をご教示ください。
627:デフォルトの名無しさん
08/09/27 22:21:26
初心者です。
cocoaはmvcによって
アプリを開発していくことはよく分かりました。
ただIBで作成したNSViewに直接modelで作成したクラスを割り当てると
この場合controllerを解しているわけではないですよね?
そういう解釈で良いんですか?
628:627
08/09/27 22:23:12
>modelで作成したクラス・・・
というよりxcodeで記述したクラスといったほうがいいのかな?
629:デフォルトの名無しさん
08/09/27 23:12:46
どんなクラスか知らんけど
通常、1クラスしか使わない場合、
ないのはモデルということになる。
630:デフォルトの名無しさん
08/10/02 00:50:56
Unicodeで
¥u3042¥u3044¥u3046
とエスケープされた文字を
あいう
と変換する方法をご教示ください。
631:デフォルトの名無しさん
08/10/02 00:53:18
どっかで見たな
632:デフォルトの名無しさん
08/10/02 04:47:43
>>631
ちょっと上でみたよね
633:デフォルトの名無しさん
08/10/02 05:09:33
ごめん。俺あんまりわかんないけど
NSLog(@"¥u3042"); // u の前は半角の¥(円マーク)
これだとそのまんまコンソール出力されたけど
NSLog(@"¥u3042"); // u の前は半角の\(バックスラッシュ)
だと、普通に”あ”って出力されたよ。
Unicodeエスケープとかでググれば何か出るんじゃない?
英語で検索した情報多いかもね。
634:デフォルトの名無しさん
08/10/04 22:14:05
ポリモーフィズムを実現するに
スーパークラスもサブクラスも
関係ない
id型ひとつあればよい
635:デフォルトの名無しさん
08/10/04 23:26:29
普段はゆるーくメッセージング、性能が気になるところはCの関数呼び出し。
Obj-CがあればC++要らんっていうのも分かる。
636:デフォルトの名無しさん
08/10/05 08:31:31
この前本屋いったら、UNIXナントカっていう雑誌の特集がObjCだった
637:デフォルトの名無しさん
08/10/05 09:06:13
>>636
UNIX magazine の10月号かな
638:デフォルトの名無しさん
08/10/05 10:20:26
わかんないけど、季刊誌だったような
639:デフォルトの名無しさん
08/10/05 10:31:37
UNIX magazine 2008年10月号
MacからiPhoneまでを網羅するアップルの開発言語Objective-C入——前編
URLリンク(www.ascii.co.jp)
640:デフォルトの名無しさん
08/10/05 19:11:30
Objective-Pascal
Object C
641:デフォルトの名無しさん
08/10/05 19:53:27
買おうと思ったら1500円したので帰ってきた
642:デフォルトの名無しさん
08/10/05 19:55:08
季刊だったのでやっぱ買いに行くことにした
643:デフォルトの名無しさん
08/10/05 20:59:23
お店閉まってた><
644:デフォルトの名無しさん
08/10/06 15:28:24
買ってきた。
冷静に考えると、2冊分の金で
専門誌買えばよかったかもしれない。
645:デフォルトの名無しさん
08/10/06 16:54:44
>>644
読む価値ある?
646:デフォルトの名無しさん
08/10/06 16:58:32
前編ってことは1月号でも特集やるのか?
647:デフォルトの名無しさん
08/10/06 18:16:03
萩原本でいいと思う。
648:デフォルトの名無しさん
08/10/06 19:32:01
>>644
言おうと思ったけど黙っていたのに気づいてしまったか
649:デフォルトの名無しさん
08/10/06 19:47:03
立ち読みしてきたんだが、「モダンシンタックス」って何?
650:デフォルトの名無しさん
08/10/06 20:40:16
そりゃおまえ現代文法だろ
651:デフォルトの名無しさん
08/10/09 23:25:39
NSViewってコントローラー無くても四角形とか描写できるよね。
あれはなんで?
コード見ても描写を担う関数が仮引数とか受け取ってるみたいだけど・・・・・・・。
一体この仮引数はなんなの?
652:デフォルトの名無しさん
08/10/09 23:52:57
>>651
何を引き受けているのかってことかな?
確かにNSViewって不思議。
他のオブジェクトだったらIBとXcodeはアウトレット、アクションとコントラーを介して
つながっているけど、NSViewってクラスでそのままリンクさせることができるもんね。
653:デフォルトの名無しさん
08/10/10 00:29:12
>>652
確かにcocoaで良くわからないところだった。
NSTextViewでもコントローラーをソースとして登録しておくって考え方も
.net出身者としては腑に落ちなかった。
654:デフォルトの名無しさん
08/10/10 09:03:01
そのあたりはいくらでも説明しますが、
何が疑問なのか曖昧すぎてわからないので、もうちょっと詳しく書いてくれませんか?
>>651 さんとかどの関数の話をしてるの?
>>652 はなにがいいたい?クラスでそのままリンクって?
>>653 はどういうこと?コントローラをソースとして?ソースって何?
655:651-652
08/10/10 14:21:46
>>654
ドモ、ありがとうございます。超初心者です。
このサイトにあるGraphic関数です
URLリンク(homepage.mac.com)
疑問1
このサイトで四角形を描写させるためのサンプル全ての関数において
NSFrame型のframeRectっていう仮引数をうけとっているよね。
でも関数の中身をみるとそんな仮引数を利用している形跡がない。
別に宣言する必要が無いのでは?というのが最初の疑問。
疑問2
サンプルコードをダウンロードしたプログラムにはコントローラー(青色の立体箱)がなかったんですよね。
僕はIBで作成したインターフェイス部分とX-codeで記述したコード部分を繋ぐためには
コントローラーでアクションとアウトレットで接続する必要があるって理解していたから
コントローラーがなくてなんでX-codeで記述した関数がインターフェイスに反映されるのか全く分かりませんでした。
そしたらこのサンプルではIBのNSViewのクラス名部分がX-codeで作成したクラスに
なっていたんです。
これはコントローラーが介在していないってことですよね。?
656:デフォルトの名無しさん
08/10/10 15:18:45
>>655
NSViewのサブクラスは -drawRect:(NSRect)frame;をオーバーライドして描画をやります。
で frameにはview自身の大きさが入ってきます。
ので、それに習っただけでしょう。
DLしてないけど、多分NSViewのサブクラスがwindowに貼り付けてませんでしたか?
最後の段からすると多分そうなってるんだと思うけど、
そうしておくと、nibロード時にサブクラスを作ってそこに貼り付けてくれます。
(実際には違いますがイメージはそんな感じです)
で、NSViewのサブクラスの
-drawRect:(NSRect)frame;
で描画処理が行われているはずです。
657:デフォルトの名無しさん
08/10/10 15:20:24
コントローラはデータを扱うクラスですので、データを使ってなければ不要です。
658:デフォルトの名無しさん
08/10/10 15:53:59
>654じゃないですが、こんな感じじゃないでしょうか。
答え1
- (void)drawRect: (NSRect)frameRect は nib (xib) が読み込まれて初期化する
時や絵を書き直す過程で呼ばれる。frameRect は描画する場所を限定する為のもの。
描画効率upの為に customView の一部に限定する事もできる。初期化の時は多分、
customView.bounds で view の全体を描画させているんだと思うな。
答え2
コントローラは介在していない。ていうか、MVC の View を直接いじっていて、
Model、Controller が無い状態。
と、書いているうちに >656 さんが書いてくれましたね。customView が直接 window に
貼付けられていました。
659:デフォルトの名無しさん
08/10/10 20:40:38
>>653
> .net出身者としては腑に落ちなかった。
そこがCocoa(MVCパターン)と.NET(n層パターン)のアーキテクチャの違いというやつだ。
MVCのViewは、主に描画だけを行いデータの保持や管理をしない。Model内でデータを更新すると、それに連動してるViewが勝手に再描画される感じ。
n層パターンだと、ビジネス層で処理したデータをプレゼン層に送りこんで、プレゼン層側でデータを保持したり処理したりする。
660:デフォルトの名無しさん
08/10/11 01:07:34
>>639
書いてるのはシロタンですぞw
retain count方式の説明に微妙に誤解を招きそうな表現があった気がした。
661:デフォルトの名無しさん
08/10/11 11:50:01
>>656-658
イメージとしては理解できました。
本当にありがとうございます。
662:デフォルトの名無しさん
08/10/19 23:32:59
10.5以降にはNSViewControllerがある
663:デフォルトの名無しさん
08/10/21 22:59:05
x-codeで開いたソースファイルの文字を大きくしたいんだけど、
やりかた知ってますか?
一応必死に探したんだけど見つかりませんでした。
664:デフォルトの名無しさん
08/10/22 00:07:56
環境設定 -> フォントとカラー
665:デフォルトの名無しさん
08/10/22 02:22:42
>>663
>>664の場所にあるよ。
フォントサイズのみの指定って感じのインターフェイスじゃないからわかりにくいっちゃあわかりにくい。
フォント名をダブルクリックしてフォントパネルの中で指定。
666:663
08/10/22 20:35:04
>>664-665
ありがとう!
フォントサイズをこんなにも決め細やかに設定できるなんてすばらしすぎる。
背景もモダンにして高級感たっぷり。
ありがとう!
667:デフォルトの名無しさん
08/10/27 21:51:10
>>659
なるほど。
だから
.NETではインターフェイスに入力したデータがコードにも受け継がれるけど、
cocoaの場合はインターフェイスに入力したデータはコードでは受け継がれずに
関数で取りに行く必要があるのか。
めんどくさいよね。これ。
668:デフォルトの名無しさん
08/10/27 22:53:40
>>667
つまり
textBoxの値をlabelに反映するだけのアプリケーションで説明すると
.netの場合
labe.text = textBox.text;
で終了。
cocoaの場合
labeField = [NSTextview setStringValue : textField];
さらにIBでlabelField,textFieldをアウトレットでコネクトする必要あり。
面毒せー!
でも高度なテクニックはcocoaのほうが分かりやすいんだよなー
669:デフォルトの名無しさん
08/10/27 22:56:19
なんでも関数にするからだめなんだよ。
.netはcocoaを見習いようがないけど、cocoaは.netを見習えるような気がする。
670:デフォルトの名無しさん
08/10/27 23:36:30
BaseTenがダウンロードできないんだけど・・・・・なんで?
671:デフォルトの名無しさん
08/10/27 23:53:43
頭わる…晒しage
672:デフォルトの名無しさん
08/10/28 00:02:21
かかって来い!
673:デフォルトの名無しさん
08/10/28 00:52:53
>>668
>cocoaの場合
>labeField = [NSTextview setStringValue : textField];
>さらにIBでlabelField,textFieldをアウトレットでコネクトする必要あり。
何年前の話をしてるんだ?
10.3 のときから、そんなのはコードを一行も書かなくても
Interface Builder でバインディングをすればできるわけだが ...
URLリンク(developer.apple.com)
とかみろ。もっと新しい英語版はこちら:
URLリンク(developer.apple.com)
674:デフォルトの名無しさん
08/10/28 01:02:43
>>673
ありがとー
実は入門書しか読んでねー。
675:デフォルトの名無しさん
08/10/29 23:21:44
もうちょっと活発に議論してほしい・・・・・・。
そこでバインディングについて簡単に説明して。
一体どんなすごいことが出来るの?
676:デフォルトの名無しさん
08/10/30 00:01:21
バインディングは議論するほどたいしたことじゃないし、
最近 Cocoa やってるひとなら常識だから。
View と Controller 間の glue
>.netの場合
>labe.text = textBox.text;
>cocoaの場合
>[labeField setStringValue : [textField stringValue]];
を書かなくてよくなるだけです。
インターフェースビルダーで、各 UI 要素が controller のどの変数を
監視/設定するかを設定出来るという機能です。(それだけじゃないけど。)
一番簡単な例は、controller に a という変数を用意して、
label も textfield も a を監視するように設定できます。
そうすると、textfield の内容が変更されると、自動で a が変更されて、
それに伴ってそれを監視している label も自動で変更されると。
別に凄いことじゃないです。
>>673
に引用されてる先を読んでください。
677:デフォルトの名無しさん
08/10/30 00:02:41
書きわすれましたが、
.net でも WPF だったか XAML だったかで同様のことができるんじゃなかったっけ。
678:デフォルトの名無しさん
08/10/30 01:52:23
週刊アスキーを読ませてもらった、大金持ちになりたいです。
679:デフォルトの名無しさん
08/10/30 02:11:38
>>675
outletを用意しなくても済むため、コード量を劇的に減らすことができるって、HMDTさんが言ってた。
URLリンク(developer.apple.com)
680:デフォルトの名無しさん
08/10/31 23:06:49
>.netの場合
>labe.text = textBox.text;
>cocoaの場合
>[labeField setStringValue : [textField stringValue]];
いちおう、cocoaでも
labeField.stringValue = textField.stringValue;
と書ける。objc2.0なら
681:デフォルトの名無しさん
08/10/31 23:37:41
明示的にプロパティじゃない setter をプロパティ構文つかうのは
Apple 的には推奨してるんだっけ?
URLリンク(developer.apple.com)
anObject.retain はするなとかいてあるが
.stringValue はいいのかな。
682:デフォルトの名無しさん
08/11/02 16:53:15
>>681
その文書を読む限り推奨も否定もしてないようですね。
ただ、書いてる内容を総合的に見れば、ドット構文を一般的なメソッド呼び出しの代替えとして使うな、ということのようだから、ちゃんとしたアクセッサメソッドならドット構文を使ってもいいんじゃないかな。
とりあえず、コンパイルエラーとかも出ないし。
683:デフォルトの名無しさん
08/11/03 01:31:54
ボタンを押したらピコーンて音声ファイルが再生されるようにしたいんですけど
なんて書けば良いんでしょうか・・。超低レベル質問なのは分かってるんですけども
684:デフォルトの名無しさん
08/11/03 02:34:21
>>683
AppleのドキュメントとかAPIリファレンスとかでそれっぽいとこ探せばいいのでは?
そこで分かったそれらしいクラス名なりメソッド名とかを使ってググるとか。
APIリファレンスとかにはそのメソッドとかを使ったAppleのサンプルへのリンクがあったりするからそれを見てみるとか。
ClashLandingってAppleのサンプルにそれっぽいのがあるらしい。
[オーディオ] - iPhoneアプリケーション開発
URLリンク(d.hatena.ne.jp)
試してみるとか?
俺も再生の仕方とかわからない・すまない。
他に詳しい方おしえてあげてください。
685:デフォルトの名無しさん
08/11/03 03:39:08
>>683
質問するスレはCocoa はさっぱり
スレリンク(mac板)
のほうが適当だとおもいますよ。
あと、質問するときはどのていどまで Cocoa を知ってるのか書いてください。
Interface Builder つかってボタンを表示する方法はしってるのかとか。
ではあちらのスレで会いましょう。
686:デフォルトの名無しさん
08/11/03 15:01:44
>>684
ありがとうございますとりあえず音は出せるようになりました!
半日かかりましたけどw
>>685
見落としてました。そのスレが自分向きですね
教えて君にならないよう頑張ってみます
687:デフォルトの名無しさん
08/11/03 17:01:52
URLリンク(blog-imgs-40.fc2.com)
688:デフォルトの名無しさん
08/11/07 02:19:43
NSTimerのscheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
関数を使って一定間隔ごとにある関数を呼び出すタイマークラスを作成したいのですが、
上手くいきません。
targetに問題があるのかなと考えているのですが、
メイン関数でタイマークラスを作成し上記の関数をよび出す場合、
targetはselfでいいのでしょうか?
689:デフォルトの名無しさん
08/11/07 09:11:25
僕らは超能力者じゃないんだからもうちょっと詳しく書いてもらわないとわかりません。
main 関数ってほんとに C の main() ?
それだと NSTimer うごかないよ。Runloop 回さないと。
あと、この質問は Objective-C プロパーというより
たぶん Cocoa の話なので、>>685 にもあるように
新マック板の Cocoa スレに行ってください。
690:デフォルトの名無しさん
08/11/07 09:25:56
>>688
おそらく NSTimer はちゃんと出来ているけど、NSRunLoop に渡してないだけな気が
しますが…… NSRunLoop の addTimer:forMode: を参照
691:名無しさん@お腹いっぱい。
08/11/17 04:06:06
Objective-Cで定数って普通どうやって定義するのかな?
Javaみたいに、関係あるクラスの中で定義して、AClass.CONST_A_VALみたいに使いたいんだが。
692:デフォルトの名無しさん
08/11/17 04:42:09
できません。
Global namespace に大量に定数を定義するのが Obj-C 流。
(あまりいいことではないとおもうけど、そういうものなんだからしかたがない。)
そのかわり定数の名前がかなり(めちゃくちゃ)長くして衝突をさけます。
NSUTF8StringEncoding
とか
NSApplicationDidUnhideNotification
とか。
Java なら NSApplication.DidUnhideNofitication とかするところを
点を一個抜く感じだと思います。
693:名無しさん@お腹いっぱい。
08/11/17 05:02:17
>>692
うう、そうですか。
それがObjective-C流ならしかたない(泣。
defineとconstではどっちの方がいいんでしょう?
694:デフォルトの名無しさん
08/11/17 05:38:41
う~ん、普通は .h では const extern にしておいて、
.m で実際の値を定義するんじゃないですかね?
少なくとも Cocoa の標準ヘッダではそうなってますし僕もそうします。
Obj-C というか C だと const の中身までヘッダにかくと
リンク時に衝突するとおもいます。ご存知なら失礼。
695:名無しさん@お腹いっぱい。
08/11/17 10:45:31
>>694
いや、とても参考になりました。
ありがとうございます。
696:デフォルトの名無しさん
08/11/17 17:46:29
Obj-CからIllustratorドキュメントを操作する場合って直接は無理ですよねぇ…
JavaScript書いてそれをObj-Cから実行って感じですか?
697:デフォルトの名無しさん
08/11/18 00:32:39
.ai のフォーマットを知ってたら直接操作出来るんじゃない?
Mac 上でやるんなら JavaScript だけじゃなくて AppleScript もつかえるでしょう。
Obj-C から AppleScript なら呼び出し放題だけど。
URLリンク(developer.apple.com)
698:696
08/11/18 16:10:37
JavaScriptでいけた
ありがとー
699:デフォルトの名無しさん
08/11/19 11:49:45
エトワレの 0.4 が出たよ。
URLリンク(etoileos.com)
なんだか独自の方向に突っ走ってる気がするが...
700:デフォルトの名無しさん
08/12/02 22:43:50
>>699
(´・ω・`)ショボーン
URLリンク(imepita.jp)
URLリンク(imepita.jp)
701:デフォルトの名無しさん
08/12/04 03:22:21
Obj-C で visitor pattern ってどうやるのがいいのかな?
上のほうで一度話題になりかけてるんだけど、
なんか急激に煽り煽られになっててよくわからん。
C++ なら
HogehogeVisitor* visitor にたいして
ループ{
element->accept(visitor)
} として、 element の accept メンバ関数で更に
visitor->visit(this)
となってるわけだけど。ネットの議論をいろいろ読む限り、
Obj-C では単に
HogehogeVisitor を追加したくなったところで、
各 element をカテゴリで拡張して
@class HogehogeVisitorInfo;
@interface/implementation FooElement (HogehogeVisitor)
-(void)doHogehoge:(HogehogeVisitorInfo*)hoge;
@end
@interface/implementation BarElement (HogehogeVisitor)
-(void)doHogehoge:(HogehogeVisitorInfo*)hoge;
@end
としてしまって
HogehogeVisitorInfo* visitorInfo=[[HogehogeVisitorInfo alloc] init];
ループ {
[element doHogehoge:visitorInfo];
}
でいい気がするんですが、もっといい方法ありますか?
702:デフォルトの名無しさん
08/12/19 19:10:07
objective-cってc++みたいにtemplateあるの?
703:デフォルトの名無しさん
08/12/19 19:21:55
汎用型の id はあるが基本型は入れらんない。
704:デフォルトの名無しさん
08/12/20 06:36:47
void CopyVector( double *v1, double *v2 ) {
v2[0] = v1[0];
v2[1] = v1[1];
v2[2] = v1[2];
}
は、以下だと駄目みたいですがどう書くのでしょう?
-(void)copyVector:(double *)v1 To:(double *)v2 {
v2[0] = v1[0];
v2[1] = v1[1];
v2[2] = v1[2];
}
705:デフォルトの名無しさん
08/12/20 06:55:08
-(void)copyVector:(double *)v1 To:(double *)v2
このインスタンスメソッド自体にエラーが生じるの?
よければそのエラーの内容も書いてほしいんだけど・・・・・・・
それともただ単に仮引数V2に渡した引数にコピーされていないだけなの?
706:デフォルトの名無しさん
08/12/20 07:23:41
インスタンスメソッドだと実体化したオブジェクトに引き渡されるだけで
本の配列には全く関係ないと思うんだよね。
v2のアクセッサメソッドを定義する方法もあるだろうけれど、
クラスメソッドにしてみてもだめ?
707:デフォルトの名無しさん
08/12/20 07:24:44
double a[2][3];
a[1][0]=a[1][1]=a[1][2]=1.0;
copyVector:a[1] To:a[0];
とすると、copyVector のところに、error: syntax error before 'To' と出てしまいます。
708:デフォルトの名無しさん
08/12/20 07:27:31
それはいったい何をやっているの?
インスタンスメソッドだよね?
ちゃんとオブジェクトに送ってるの?
709:デフォルトの名無しさん
08/12/20 07:30:28
+(void)copyVector:(double *)v1 To:(double *)v2 {
v2[0] = v1[0];
v2[1] = v1[1];
v2[2] = v1[2];
}
ということでしょうか? 結果は同じ様です。
710:デフォルトの名無しさん
08/12/20 07:34:28
[self copyVector:a[1] To a[0]];
でどう?
711:デフォルトの名無しさん
08/12/20 07:35:17
>>709
てかクラスでもインスタンスメソッドでも
オブジェクトにメッセージをおくらないと・・・・・
712:デフォルトの名無しさん
08/12/20 07:40:35
copyVector:a[1] To:a[0];
・・・・・・・・・・そりゃToの前にエラーが出るわな。
713:デフォルトの名無しさん
08/12/20 07:43:14
>>710 で解決した様です。この場合のself って何に当たるのでしょう?
714:デフォルトの名無しさん
08/12/20 07:46:15
済みません解説をお願いしますう。>>712
715:デフォルトの名無しさん
08/12/20 07:47:15
>>714
すみません。
突っ込んどいて解説なしはダメですよね。
716:デフォルトの名無しさん
08/12/20 08:18:48
copyVector: (ラベルやね、ラベル!) a[1] (配列の要素になんか入れようってか!) (...さあ.代入コイ!代入!...) (ふじこ)To:a[0];
717:デフォルトの名無しさん
08/12/20 08:46:20
>>716 何といいますか、おっしゃる事がよく分からないのですが。。。
718:デフォルトの名無しさん
08/12/20 10:18:41
解説をお願いする前に C と Obj-C の文法をおさらいしたほうがいいと思うんだな
719:デフォルトの名無しさん
08/12/20 15:41:56
self 知らずに Obj-C のプログラムが書けるわけが無いと思うんだが。
720:デフォルトの名無しさん
08/12/20 15:46:57
最優秀Javaプログラマがよく作る
グローバルスタティックメソッドライブラリークラス
じゃないの?
721:デフォルトの名無しさん
08/12/20 18:46:28
スーパーサイヤ人にはなれるけど、
空を飛べないサイヤ人みたいだ。
722:デフォルトの名無しさん
08/12/21 01:42:16
今おさらい中です。
723:デフォルトの名無しさん
08/12/21 02:38:06
>>711が全て。
selfは自分自身だよ。
724:デフォルトの名無しさん
08/12/21 02:56:14
なんかやっと分かりつつあります。自分て言うのは、そのメソッドを持っているインスタンスということですね。
725:デフォルトの名無しさん
08/12/21 11:24:40
人に聞く前に
せめて教科書くらいは読んだ方がいいと思うんだよね
726:デフォルトの名無しさん
08/12/22 12:15:25
Obj-CよりC++勉強した方がいいよって、叔父さんに言われた(´・ω・`)
727:デフォルトの名無しさん
08/12/22 15:44:28
叔父さんってどうせIT土方のクソドザだろ??
そんなには13インチのMacBookプレゼントしてやれ。
728:デフォルトの名無しさん
08/12/22 22:58:46
両方勉強したって大した事でもない。
729:デフォルトの名無しさん
08/12/23 18:45:13
おすすめのObj-C入門書教えてけろ
「やさしいC」みたいなのがいいっす
730:デフォルトの名無しさん
08/12/23 18:51:31
NSString に入っているファイル名なテキストから拡張子を取り除きたいのですが、
対応するメソッドはありますか?
拡張子を取るなら NSString#pathExtension で出来ますが、それ以外の部分が欲しいのです。
731:デフォルトの名無しさん
08/12/23 19:14:02
>>729,730
この手の話・質問はここよりも、新Mac板 Cocoaはさっぱり!!! の方がレスポンス良いよ。
スレリンク(mac板)
>>729
「やさしいC」は読んでないけど、入門書は
木下誠「たのしいCocoa」、アーロン・ヒレガス「MacOSX Cocoa プログラミング」
>>730
-(NSString *)stringByDeletingPathExtension