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


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

Objective-C [ObjC part:3];



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

809 名前:jP [2009/02/01(日) 20:02:11 ]
最近Mac向け開発を始めたんだけど、手順がよくわからん。
javaとかCと違って、インタフェースとコードが分かれてるから感覚がつかめないんだよね。
だれか、C/javaからobjective-C始めた人っている?
その辺を話したいんだけどなぁ。(ここに書くようなことじゃなかっから、ごめんちゃい)

810 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:13:07 ]
むしろ大半がそうじゃね

811 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:20:37 ]
ごめん俺AppleScript → ObjCだわ

812 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:24:24 ]
俺なんかなでしこ→AppleScript→Objective-C(移行中)だぞw

813 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 20:37:45 ]
Java→Objective-Cだけど呼んだ?
つかJava分かるならObjective-Cなんかすぐ分かると思うんだがなぁ。
勉強しなきゃいけない分量で言ったらJavaの1/3くらいじゃなかろうか。

814 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 21:40:44 ]
気味の悪い文法が障害

815 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:41:34 ]
文法はどうでもいいんだけど、
MSのダブルクリック&コードとn層データ構造に慣れてたから
CocoaのMVCには結構馴染みにくかったな。
あ、あとVSのIntelisenceに慣れてたからXcodeも面倒くさかった。
まぁ慣れだな。

816 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:46:42 ]
>>809
既にプログラミングやったことあるなら、ADCのObjective-Cプログラミング言語とかCocoa基礎ガイドとか読めばいいと思うよ。

817 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:53:31 ]
gccの-fobjc-direct-dispatchってもしかして
メソッドの実装を直接呼び出してくれるの?



818 名前:デフォルトの名無しさん [2009/02/02(月) 03:10:32 ]
objective-cを使ってアプリを作れるようになるには、何をすれば良いですか?
cocoaプログラミングの本は読みました。
例えば、Cの関数を覚えるとか、何かあったら教えてください。

819 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 03:25:06 ]
>>818
釣れますか?

820 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 07:44:55 ]
>>815
ダブルクリック&コードにかんしては
dotnetaddict.dotnetdevelopersjournal.com/dcacs.htm
のひとが面白い分析をしてるなとおもった。
まあこのひとは .Net から Obj-C に半分ぐらい転向したひとなので、
無理に弁護してる感もなきにしもあらずなのだが...

821 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 07:50:37 ]
>>817
>gccの-fobjc-direct-dispatchってもしかして
>メソッドの実装を直接呼び出してくれるの?
そんなことしたら Obj-C の良さが台無しだろう。
それは objc_msgSend を呼び出すのが速くなる最適化です。
メソッドの実装が欲しければ Obj-C のランタイムつかってとってこれます。

五年前の msgSend の実装 を解析したのが
www.mulle-kybernetik.com/artikel/Optimization/opti-9.html
にあります。最近はもっと最適化進んでるんでしょうが。

822 名前:デフォルトの名無しさん [2009/02/02(月) 23:45:10 ]
>>809
Cocoaアプリ開発って極端な話XCodeで新規プロジェクトを選んだ時点で
完成してるんだよね。だからコード書かなくても動く。
サブクラスで必要な部分だけどんどん拡張していける。
CarbonやWin32って1から全部書かないといけないんだよね。

Cocoaアプリ開発=Cocoaフレームワークの拡張かな。

823 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:14:27 ]
というか、C / Java だって、大昔アセンブラつかってたひとからすれば、
レジスタをいじらなくても動くなんてよく判らん、とか、
自分で vram を叩かなくても文字が表示される、どうなってるんだ、
とかだったはずで、単に慣れの問題だとおもう。
徐々にシステム側が沢山の部分をやってくれるわけでさ。

824 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:27:52 ]
>>821
レスどうも。リンク先面白かったです。

ObjCのメソッド呼び出しが遅いとかなんとか
読んだ記憶がありましたので、もしかしたらと。

にしても、ObjC動的すぎて素敵。
いや、むしろ変態。

825 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:26:04 ]
Cはアセンブラとあまり変わらない感覚だったよ。
特に68系の場合はアセンブラもわりと高級言語っぽかったから、
コンパイルしたらどういうコードになるか容易に想像ついた。

826 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 06:20:08 ]
>>814
> 気味の悪い文法が障害
smalltalk一回経験してるとそうでもないんだけどね
c++に慣れてると目が点になるかもしれん

827 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 08:14:20 ]
822みたいな奴を見ると、Mac使ってることが嫌になる



828 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 08:06:40 ]
マク関係はどうもスルー力が試される機会が多いんだよな

829 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:31:49 ]
>>814
気味の悪い文法が障害

CやJavaやPHPやってるんだが、始めて2日でむしろ気持ち良くなってきたんだが。

830 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 08:33:34 ]
自然にコメントを大量につけてることになるのがいいよね。
自分でつくるクラスのメソッド名もならって読んで意味のわかる英語になるようにしてる。
これだけで数ヶ月後にコードを見直したときの理解度が全然違うベ。

831 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 12:30:15 ]
>>829
俺も大分気持ち良くなって来ました。

832 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 16:13:30 ]
[Meta2ch agreeTo:829 with:"passion" ]

833 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:09:21 ]
WindowsがF#に移行しつつあるのにobj-c2.0ぐらいの文法で障害とか
どんだけ池沼なんだよw

834 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:14:22 ]
>>833
>WindowsがF#に移行しつつある
まあ一般化はあと5年は先だろうな。

835 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:44:28 ]
iPhone デベロッパーズ クックブック
もうすぐ出るね。
www.amazon.co.jp/dp/4797352418/

836 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 20:56:13 ]
>>833
Windows、F#に移行しつつあんの?
最新版VSで辛うじてサポート程度としかしらんかったわ。

837 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:43:58 ]
C# <= C++
J# <= Java
F# <= Fortran??



838 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 22:37:06 ]
Functional Language

839 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 15:42:45 ]
F#は、Objective Camlだよ。
研究とか趣味の人向けの選択肢であって、大多数のプログラマには無縁の存在だから。

840 名前:デフォルトの名無しさん [2009/02/18(水) 14:21:32 ]
Windows版のGCCにはobjective-cコンパイラも付属してますが、
これを用いて、Windows APIをコールして、簡単なGUIアプリを作成できますか?

841 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:25:00 ]
できるはず

842 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 00:33:30 ]
Windows API をどうやって Obj-C にくるむかという問題があるのでは...
Windows で Cocoa で開発したければ Cocotron
www.cocotron.org/
とか GNUStep
www.gnu.org/software/gnustep/experience/Windows.html
とかあるよ。

843 名前:デフォルトの名無しさん [2009/02/19(木) 03:43:53 ]
GNU Step入門
www.amazon.co.jp/gp/offer-listing/4861863007/
なんて本がこっそり出てるんだけど、1ナノセカンドも
話題になってない気がする。

844 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 04:18:22 ]
作者の名前と経歴がなぜか笑えるw

そういえばFileMagnetのWindowsクライアントはCocotronで作られたんじゃなかったっけ?

845 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 08:33:44 ]
>>842
直接APIをコールすればいいんでねいの?

846 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 21:12:59 ]
>>843
なか見検索できないんだが、なかはどうなの?


847 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 21:37:40 ]
あったかいナリ



848 名前:デフォルトの名無しさん [2009/02/20(金) 00:54:58 ]
>>822
>完成してるんだよね。だからコード書かなくても動く。

おまえプログラム組んだ事ほぼ皆無だろw
Interface Builderでコントロールをドラッグ&ドロップしてアプリが完成したつもりになってる輩とみたw
そんな作業、アプリ制作の1%程度の作業なんだが。


849 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 02:14:38 ]
アホなりw

850 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 12:35:06 ]
>>848
まあほぼ同意だが、Interface Builder は何かほかの GUI デザイナとちがって
作業時間が長いようなきがするな...
バインディングとかターゲット、outlet とかも一杯で。
ソースコードになってない情報が多すぎてわかりにくいときも。

851 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:30:44 ]
NSObjectのカテゴリ作ってperformSelectorを上書きして
呼びだされたメソッド名を逐一NSLogで出力したいんだが、
元のperformSelectorを呼びだす方法ってあるかな?
おもしろそうなのに全然使いこなせてない気がする>カテゴリ

852 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 13:46:53 ]
カテゴリでは同名のメソッドは追加できない気がする。
journal.mycom.co.jp/column/objc/029/index.html
にやりかたがのってますが、Leopard になってすこし runtime がかわったので
10.5 でコンパイルする場合は 10.4 用にインスペクタで設定しないと
そのままではコンパイルエラーがでるでしょう。
何にせよその連載は勉強になります。

また、メソッドの呼び出しの際に performSelector: がいつでも呼ばれるか
というとそうではないので...

developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_13_section_1.html

developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/
developer.apple.com/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/
developer.apple.com/documentation/Cocoa/Reference/ObjCRuntimeRef1/

のあたり参照。

853 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 16:03:34 ]
>>851
> 呼びだされたメソッド名を逐一NSLogで出力したい

それはずばりアスペクト指向の典型的な活用例なんで、素のObjC/Cocoaでは難しい。

journal.mycom.co.jp/column/objc/044/index.html

854 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 03:05:20 ]
そういうのは DTrace が得意そうだね >> 呼び出されたメソッドの書き出し

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
特別な場合を除いて不要という形ですか、ありがとうございます。






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

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

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