- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 12:18:31 ]
- Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
(Wikipedia:ja.wikipedia.org/wiki/Objective-C より) 前スレ pc11.2ch.net/test/read.cgi/tech/1106983092/ 前々スレ pc5.2ch.net/tech/kako/990/990574267.html
- 855 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 03:57:43 ]
- >>854
DTraceはカーネルの呼び出しだけでしょう? ユーザー空間内での やり取りは無感知。
- 856 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:34:51 ]
- >>855
そうでもないよ。objc????:: という provider があります。 www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html とか参照。
- 857 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:37:13 ]
- >>855
そんな事無いですよ。DTrace 自体はプローブポイントさえあれば、カーネルか ユーザープロセスかは無感知。
- 858 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:14:10 ]
- >>858
標準の NSScanner つかって頑張ってもいいけど、 個人的には RegEx Kit Lite がおぬぬめ。 regexkit.sourceforge.net/RegexKitLite/
- 860 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:29:01 ]
- >> 859
おおおまさにこれです! ありがとうございました
- 861 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:59:36 ]
- 質問です。
カテゴリを利用して、(ある1つのクラスの)ソースファイル の分割を行うとします。 クラスAの実装ファイルを、 ファイル1とファイル2に分割、といった具合です。 そのとき、ファイル1で定義、実装されているプライベートメソッドを、 ファイル2で使おうとすると、ビルドのときに警告がでますが、これを なんとかできないものでしょうか。 解決策として、そもそも、同一のプライベートメソッドを利用する メソッド群を分割するな、という考えもあるかと思います。 また、コンパイラの警告レベルの調節でも、できるのかもしれません。 ですが、ほかにいい方法をご存知の方がいればご教示下さると助かります。 もしも、こういうこと(プライベートメソッドの他ファイルでの利用) がプログラミングのマナー違反であれば、ご指摘下さい。
- 862 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 06:12:25 ]
- プライベートメソッドをならべたヘッダをひとつつくればいいんでは?
ClassAPrivate.h に @interface ClassA (Private) -(id)hoge:(id) ... @end とかしておいて、それを実装ファイルで #import すればいいとおもいます。 Obj-C では@interface ClassA (CategoryX) で宣言したやつの 実装を @implementation ClassA (CategoryX) の中でしないといけないという ルールもないので、自由自在です。
- 863 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:43:26 ]
- その方法も頭に浮かんだのですが、ビルドのときに2重定義の警告と
なる気がして試してみませんでした。
- 864 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 17:17:10 ]
- >>861
分からないので聞くのですが、他から参照したいならなんでプライベートにするのでしょうか?
- 865 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:31:08 ]
- 他から、といっても同じクラスなのです。
- 866 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 22:26:48 ]
- >>865
なるほど。 どうも私の頭がJAVA脳だったようです。
- 867 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:10:43 ]
- >>867
だから、@classを付ける基準は 相互に依存するクラスを定義しなければならない時、またこのときは@classを書かざるを得ない だけ それ以外は冗長で無駄
- 870 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:18:21 ]
- >>868
ありがとうございます。今までずっと悩んでたのですが、すっきりしました。 >>869 特別な場合を除いて不要という形ですか、ありがとうございます。
|

|