09/02/02 23:45:10
>>809
Cocoaアプリ開発って極端な話XCodeで新規プロジェクトを選んだ時点で
完成してるんだよね。だからコード書かなくても動く。
サブクラスで必要な部分だけどんどん拡張していける。
CarbonやWin32って1から全部書かないといけないんだよね。
Cocoaアプリ開発=Cocoaフレームワークの拡張かな。
823:デフォルトの名無しさん
09/02/03 00:14:27
というか、C / Java だって、大昔アセンブラつかってたひとからすれば、
レジスタをいじらなくても動くなんてよく判らん、とか、
自分で vram を叩かなくても文字が表示される、どうなってるんだ、
とかだったはずで、単に慣れの問題だとおもう。
徐々にシステム側が沢山の部分をやってくれるわけでさ。
824:デフォルトの名無しさん
09/02/03 00:27:52
>>821
レスどうも。リンク先面白かったです。
ObjCのメソッド呼び出しが遅いとかなんとか
読んだ記憶がありましたので、もしかしたらと。
にしても、ObjC動的すぎて素敵。
いや、むしろ変態。
825:デフォルトの名無しさん
09/02/03 01:26:04
Cはアセンブラとあまり変わらない感覚だったよ。
特に68系の場合はアセンブラもわりと高級言語っぽかったから、
コンパイルしたらどういうコードになるか容易に想像ついた。
826:デフォルトの名無しさん
09/02/03 06:20:08
>>814
> 気味の悪い文法が障害
smalltalk一回経験してるとそうでもないんだけどね
c++に慣れてると目が点になるかもしれん
827:デフォルトの名無しさん
09/02/03 08:14:20
822みたいな奴を見ると、Mac使ってることが嫌になる
828:デフォルトの名無しさん
09/02/04 08:06:40
マク関係はどうもスルー力が試される機会が多いんだよな
829:デフォルトの名無しさん
09/02/06 03:31:49
>>814
気味の悪い文法が障害
CやJavaやPHPやってるんだが、始めて2日でむしろ気持ち良くなってきたんだが。
830:デフォルトの名無しさん
09/02/06 08:33:34
自然にコメントを大量につけてることになるのがいいよね。
自分でつくるクラスのメソッド名もならって読んで意味のわかる英語になるようにしてる。
これだけで数ヶ月後にコードを見直したときの理解度が全然違うベ。
831:デフォルトの名無しさん
09/02/06 12:30:15
>>829
俺も大分気持ち良くなって来ました。
832:デフォルトの名無しさん
09/02/09 16:13:30
[Meta2ch agreeTo:829 with:"passion" ]
833:デフォルトの名無しさん
09/02/10 18:09:21
WindowsがF#に移行しつつあるのにobj-c2.0ぐらいの文法で障害とか
どんだけ池沼なんだよw
834:デフォルトの名無しさん
09/02/10 18:14:22
>>833
>WindowsがF#に移行しつつある
まあ一般化はあと5年は先だろうな。
835:デフォルトの名無しさん
09/02/10 18:44:28
iPhone デベロッパーズ クックブック
もうすぐ出るね。
URLリンク(www.amazon.co.jp)
836:デフォルトの名無しさん
09/02/10 20:56:13
>>833
Windows、F#に移行しつつあんの?
最新版VSで辛うじてサポート程度としかしらんかったわ。
837:デフォルトの名無しさん
09/02/11 12:43:58
C# <= C++
J# <= Java
F# <= Fortran??
838:デフォルトの名無しさん
09/02/11 22:37:06
Functional Language
839:デフォルトの名無しさん
09/02/12 15:42:45
F#は、Objective Camlだよ。
研究とか趣味の人向けの選択肢であって、大多数のプログラマには無縁の存在だから。
840:デフォルトの名無しさん
09/02/18 14:21:32
Windows版のGCCにはobjective-cコンパイラも付属してますが、
これを用いて、Windows APIをコールして、簡単なGUIアプリを作成できますか?
841:デフォルトの名無しさん
09/02/18 14:25:00
できるはず
842:デフォルトの名無しさん
09/02/19 00:33:30
Windows API をどうやって Obj-C にくるむかという問題があるのでは...
Windows で Cocoa で開発したければ Cocotron
URLリンク(www.cocotron.org)
とか GNUStep
URLリンク(www.gnu.org)
とかあるよ。
843:デフォルトの名無しさん
09/02/19 03:43:53
GNU Step入門
URLリンク(www.amazon.co.jp)
なんて本がこっそり出てるんだけど、1ナノセカンドも
話題になってない気がする。
844:デフォルトの名無しさん
09/02/19 04:18:22
作者の名前と経歴がなぜか笑えるw
そういえばFileMagnetのWindowsクライアントはCocotronで作られたんじゃなかったっけ?
845:デフォルトの名無しさん
09/02/19 08:33:44
>>842
直接APIをコールすればいいんでねいの?
846:デフォルトの名無しさん
09/02/19 21:12:59
>>843
なか見検索できないんだが、なかはどうなの?
847:デフォルトの名無しさん
09/02/19 21:37:40
あったかいナリ
848:デフォルトの名無しさん
09/02/20 00:54:58
>>822
>完成してるんだよね。だからコード書かなくても動く。
おまえプログラム組んだ事ほぼ皆無だろw
Interface Builderでコントロールをドラッグ&ドロップしてアプリが完成したつもりになってる輩とみたw
そんな作業、アプリ制作の1%程度の作業なんだが。
849:デフォルトの名無しさん
09/02/20 02:14:38
アホなりw
850:デフォルトの名無しさん
09/02/20 12:35:06
>>848
まあほぼ同意だが、Interface Builder は何かほかの GUI デザイナとちがって
作業時間が長いようなきがするな...
バインディングとかターゲット、outlet とかも一杯で。
ソースコードになってない情報が多すぎてわかりにくいときも。
851:デフォルトの名無しさん
09/02/23 09:30:44
NSObjectのカテゴリ作ってperformSelectorを上書きして
呼びだされたメソッド名を逐一NSLogで出力したいんだが、
元のperformSelectorを呼びだす方法ってあるかな?
おもしろそうなのに全然使いこなせてない気がする>カテゴリ
852:デフォルトの名無しさん
09/02/23 13:46:53
カテゴリでは同名のメソッドは追加できない気がする。
URLリンク(journal.mycom.co.jp)
にやりかたがのってますが、Leopard になってすこし runtime がかわったので
10.5 でコンパイルする場合は 10.4 用にインスペクタで設定しないと
そのままではコンパイルエラーがでるでしょう。
何にせよその連載は勉強になります。
また、メソッドの呼び出しの際に performSelector: がいつでも呼ばれるか
というとそうではないので...
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)
のあたり参照。
853:デフォルトの名無しさん
09/02/24 16:03:34
>>851
> 呼びだされたメソッド名を逐一NSLogで出力したい
それはずばりアスペクト指向の典型的な活用例なんで、素のObjC/Cocoaでは難しい。
URLリンク(journal.mycom.co.jp)
854:デフォルトの名無しさん
09/02/25 03:05:20
そういうのは DTrace が得意そうだね >> 呼び出されたメソッドの書き出し
855:デフォルトの名無しさん
09/02/25 03:57:43
>>854
DTraceはカーネルの呼び出しだけでしょう? ユーザー空間内での
やり取りは無感知。
856:デフォルトの名無しさん
09/02/25 09:34:51
>>855
そうでもないよ。objc????:: という provider があります。
URLリンク(www.mactech.com)
とか参照。
857:デフォルトの名無しさん
09/02/25 11:37:13
>>855
そんな事無いですよ。DTrace 自体はプローブポイントさえあれば、カーネルか
ユーザープロセスかは無感知。
858:デフォルトの名無しさん
09/03/01 12:49:31
objective-cで、あるパターンの中から文字列を抽出したいと思っています
<p class="info"><strong class="number">6</strong>|<strong class="time">3:16</strong>...
上記のような文字列から 6 と 3:16 の部分だけをそれぞれ取得したいのです
C#ではSystem.Text.RegularExpressionsのRegexクラスを使用して取得できたのですが、Objective-Cで同様の処理はどのように取得すればいいのでしょうか?
ちなみにiPhone上で動かそうと思っています
859:デフォルトの名無しさん
09/03/01 13:14:10
>>858
標準の NSScanner つかって頑張ってもいいけど、
個人的には RegEx Kit Lite がおぬぬめ。
URLリンク(regexkit.sourceforge.net)
860:デフォルトの名無しさん
09/03/01 13:29:01
>> 859
おおおまさにこれです!
ありがとうございました
861:デフォルトの名無しさん
09/03/03 01:59:36
質問です。
カテゴリを利用して、(ある1つのクラスの)ソースファイル
の分割を行うとします。
クラスAの実装ファイルを、
ファイル1とファイル2に分割、といった具合です。
そのとき、ファイル1で定義、実装されているプライベートメソッドを、
ファイル2で使おうとすると、ビルドのときに警告がでますが、これを
なんとかできないものでしょうか。
解決策として、そもそも、同一のプライベートメソッドを利用する
メソッド群を分割するな、という考えもあるかと思います。
また、コンパイラの警告レベルの調節でも、できるのかもしれません。
ですが、ほかにいい方法をご存知の方がいればご教示下さると助かります。
もしも、こういうこと(プライベートメソッドの他ファイルでの利用)
がプログラミングのマナー違反であれば、ご指摘下さい。
862:デフォルトの名無しさん
09/03/03 06:12:25
プライベートメソッドをならべたヘッダをひとつつくればいいんでは?
ClassAPrivate.h に
@interface ClassA (Private)
-(id)hoge:(id) ...
@end
とかしておいて、それを実装ファイルで #import すればいいとおもいます。
Obj-C では@interface ClassA (CategoryX) で宣言したやつの
実装を @implementation ClassA (CategoryX) の中でしないといけないという
ルールもないので、自由自在です。
863:デフォルトの名無しさん
09/03/03 12:43:26
その方法も頭に浮かんだのですが、ビルドのときに2重定義の警告と
なる気がして試してみませんでした。
864:デフォルトの名無しさん
09/03/03 17:17:10
>>861
分からないので聞くのですが、他から参照したいならなんでプライベートにするのでしょうか?
865:デフォルトの名無しさん
09/03/03 23:31:08
他から、といっても同じクラスなのです。
866:デフォルトの名無しさん
09/03/04 22:26:48
>>865
なるほど。
どうも私の頭がJAVA脳だったようです。
867:デフォルトの名無しさん
09/03/07 18:35:46
ClassA.hで
#import <Cocoa/Cocoa.h>
#import "ClassB.h"
@interface ClassA : NSObject {
ClassB* b;
}
@end
ClassB.hで
#import <Cocoa/Cocoa.h>
#import "ClassA.h"
@interface ClassB : NSObject {
ClassA* a;
}
@end
というように、互いにインスタンスを持ち合うとコンパイル時にエラーが出ますが、
ClassA.h内で
#import "ClassB.h"
@class ClassB;
ClassB.h内で
#import "ClassA.h"
@class ClassA;
というふうに@classディレクティブを付けることでエラーが出なくなります。
@class classnameが、classnameがクラスであることを宣言しているのはわかるのですが、
なぜこれをやると、ClassA.h、ClassB.hを互いにimportしているにもかかわらずエラーが出なくなるのでしょうか。
逆に、付けないとなぜエラーになるのでしょうか。
また、@classを付ける基準ですが、
・そのクラスのスーパークラス
・Cocoa等のフレームワーク内のクラス
を除く全てのクラスを使用する時、必ず@classをつけるという考え方で良いのでしょうか。
どなたか詳しくご存知のかたよろしくお願いします。
868:デフォルトの名無しさん
09/03/07 19:01:04
>>867
詳しくはないが、自分ならこう考える
Objective-Cの背後にある仕組みは結局Cと何もかわらない
importは本質ではなくひとつのファイルに連続して次のように書けるかという問題
Cではこう書けない
struct A { struct B *b; };
struct B { struct A *a; };
なぜならAの宣言時にBはまだ宣言されていないから。しかしCでは不完全型を定義できて、
struct B;
struct A { struct B *b; };
struct B { struct A *a; };
こう書く事ができる。Aの定義時にBは不完全型なのでインスタンスは作れないが、ポインタは作れる。ポインタのサイズはどの構造体でも固定だからだ
で、Objective-Cでも背後で同じようなことが起きてるんだと思うよ
@class B;
として不完全型を定義すればそのポインタを次の行からは使えるようになる
だからエラーにならない
どう?
869:デフォルトの名無しさん
09/03/07 19:10:43
>>867
だから、@classを付ける基準は
相互に依存するクラスを定義しなければならない時、またこのときは@classを書かざるを得ない
だけ
それ以外は冗長で無駄
870:デフォルトの名無しさん
09/03/07 19:18:21
>>868
ありがとうございます。今までずっと悩んでたのですが、すっきりしました。
>>869
特別な場合を除いて不要という形ですか、ありがとうございます。