トップページ⇒tech
30コメント16KB

Objective-Cの質問

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 NGNG
gcc2.95.2を使ってます。

C++で言うコンストラクタはObjective-Cでは
どのような名前なんでしょうか?initialize、initなどを見ます。

Objectクラスにある+new、+allocメソッドは
+new: コンストラクタなどを起動したりする。
+alloc: 領域を割り当てるだけ。
と考えて良いのですか?

+new、+allocで確保されたメモリは自分で解放する必要がありますか?
(ガーべジコレクタがやってくれる???それとも処理系依存?)

Objectクラスの-freeメソッドは何のためにありますか?
解放用のメソッドですか?

Objective-CにはC++のSTLのような物(仕様で定められている物)は存在しますか?
存在していなくても事実上標準みたいな物があれば教えてください。
00021 NGNG
ご存知な方いませんか?

その後、色々調べると以下のことがわかりました。
コンストラクタはないようです。
主にinitというメソッドを使用して
id obj=[[HogeObject alloc] init];
などどするようです。

ガーべジコレクションはどうやら処理系依存みたいです。
http://www.fsinet.or.jp/~nito/objective-c/answer-16.html
となるとオブジェクトにfreeメッセージを送って解放する必要があるんでしょうか?

クラスライブラリについてはlibobjectsというものがあるようです。
ftp://ftp.gnu.org/gnu/libobjects/
0003名無しさん@お腹いっぱい。 NGNG
ボロださない範囲でヒント。

「スコープ」の勉強してください。
あとはデバッガでコンストラクタ・デストラクタにブレークポイント張って
何時通るのか眺めて喜ぶ。
他は多分付属のインクルード群を端から端までながめれば判る。
0004名無しさん@お腹いっぱい。 NGNG
GCC以外のObjective-C開発環境ってどんなのあるの?
WinやMacではどうすりゃいい?
00051 NGNG
ひとまず、何か本を買うことにします。
最後に聞きたいのですがgccで
[Object douyo];//douyoメソッドは存在しない
とかすると例外みたいなのが発生しますがこれを捕捉する方法はありませんか?
事前に調べるしかないんでしょうか?

>>3
スコープって
{
int _2ch;

{
int _2ch;
}
}
みたいなスコープですか?

>>4
http://www.fsinet.or.jp/~nito/objective-c/answer-17.html
http://www.fsinet.or.jp/~nito/objective-c/answer-15.html
このへんかな。
0006名無しさん@お腹いっぱい。 NGNG
C++が普及してJavaがでて
なぜ今Objective-Cなの?


0007名無しさん@お腹いっぱい。 NGNG
Smalltalkへと回帰するため。
0008名無しさん@お腹いっぱい。 NGNG
>6
それはCDがある現在でもLPが売られているのと同じ事だよ。
0009名無しさん@お腹いっぱい。 NGNG
SmalltalkerはRubyへ改宗せよ
0010名無しさん@お腹いっぱい。 NGNG
>>6
よくわからんが、MacOSXが出ることだしObj-Cに興味を
持つ人が出てきてもおかしかないんじゃないかなぁ。
でもApple自身はCocoaフレームワークに関してはJava
を使うよう誘導している気がする...
00111 NGNG
Mac OSとかは全然知りません。(^^;
Smalltalkに興味があるのもそうなんだけど、
ネイティブコードを吐けるのとCのような文法と
C++よりシンプルな文法とC++より動的なのに興味をもちまして...
ちょっと情報が少ないのがつらいですけど。
00121 NGNG
知っている情報へのリンクを張っておきますね。

Objective-Cの仕様?
http://www.toodarkpark.org/computers/objc/

チュートリアル
http://www.slip.net/~dekorte/Objective-C/New/GettingStarted/GettingStarted.html

知っている中で唯一日本語のページ
http://www.fsinet.or.jp/~nito/

Objective-C FAQ
http://faqs.jmas.co.jp/FAQs/computer-lang/Objective-C/faq

GNUstepに含まれるクラスライブラリのリファレンス
http://developer.apple.com/techpubs/macosx/Cocoa/Reference/Foundation/ObjC_classic/FoundationTOC.html

GNUstep
http://www.gnustep.org/

更に調べた所、
GNUstepに含まれるクラスライブラリはlibobjectsをベースにしているようです。
なのでlibobjectsがメーク出来ない場合はGNUstepを入れると良いかと思います。
(私はlibobjectsをメーク出来なかったのでGNUstepを入れました。)
0013名無しさん@どーでもいいことだが。 NGNG
1さんもそのうちObj-Cのページ作ってよ(笑)
私も興味あるんすよー

数年前言語マニアの知り合いがSmalltalk&obj-Cに燃えはじめて、横で見てたのでずっと興味が・・・
0014名無しさん@どーでもいいことだが。 NGNG
そう言えば2年ほど前まで「Macintosh DEVELOPER'S JOURNAL」というプログラマ向けの雑誌がMacにはあったんです。
そこでNeXT買収決定以降、Appleも当初これからはOcjective-Cで行くと言っていたので特集や連載記事が組まれていた記憶があります。
私は興味無かったので読み飛ばしていた記憶がありますが。

あと当初Objective-C移行をApple自身が言っていたので(今のOSXはC++標準ということになってる)、メトロワークスもCodeWarriorのObjective-C版を試作したはずです。
(あのあっという間に早々にCodeWarriorをObjective-C対応にしたのには驚いた。メトロワーク惚れた(笑))

英語苦手なのでメトロワークスの海外サイト見てないんですが、あの試作版落ちてないんですかね
0015名無しさん@お腹いっぱい。 NGNG
Metroworksのサイト内の英文
http://www.metrowerks.com/desktop/pro/why/
0016名無しさん@お腹いっぱい。 NGNG
>>15
英語読めません。なんて書いてあるん?
0017名無しさん@お腹いっぱい。 NGNG
PowerPC用にならObject Pascal と Objective C のコンパイラもサポートされてるでよ。
…かな?
0018名無しさん@お腹いっぱい。 NGNG
試作版を越えて今はCodeWarriorってObjective Cコンパイラ普通にサポートされてるっぽいですよ。
http://www.elec.ucl.ac.be/Apple/1997/msg00111.html

Rhapsody(MacOSX Server)の開発ではgcc、CodeWarrior、Openstepでクロス開発あたりが選択肢としてあるようです。
MPWもやりようがあるそうです。
0019名無しさん@お腹いっぱい。 NGNG
>>14さん
MacOSXですが、Objective CからC++に移行というわけでもないみたいです。
http://www.tech-arts.co.jp/macosx/macosx-jp/htdocs/1500/1587.html

IOKitのところがそう変わっただけの話しみたい。
けどそうなるとC++を使うほうが普通ということですよね

その理屈でいけば現行MacOSじゃPascal使うのが普通って話しになっちゃいますが。
0020名無しさん@お腹いっぱい。 NGNG
1さんへ。もうその質問についての解答は見つけられたのでしょうか? 私は
OpenStep 4.2 Enterprise(NT)上でのObjective-Cを使っているのですが…
allocとinitとnewについてですが、allocは領域割り当て、initがコントラクタ
呼び出しです。派生クラス側でinitをオーバーライドして、その中で基底クラス
のinitを呼んであげるのが基本です。newはallocとinitを足したものです。
OpenStep4.2上ではFreeメソッドは見当たらないのですが、そのかわり、releaseと
autoreleaseがあります。releaseはオブジェクトの開放。autoreleaseは、その
オブジェクトのガーベージコレクタのスイッチを入れ、他からまったく参照されなく
なったときに自然消滅できるようにします。あと、OpenStep4.2上ではNeXTStep
ライブラリNSobject@` NSImage etc...が装備されていて、ほとんどこれらを
使ってすべて済ましてます。Cで書いてもいいんですが、NS...を使うとコトが
簡単にサッサと済んでくれます。
0021マリベル NGNG
>19
ドライバがC++で書けるのかぁ、こりゃ良いですね、うらやましいぞ〜


00221 NGNG
>>20 さん
見つかりませんでした。
20さんので解決しました。


-freeメソッドはgccのObjectクラスに存在するものみたいです。
objc/Object.h

このOpenStepのUNIXでの実装(?)はGNUstepなどがありますので
GNUstepをインストールすることによってこれらのクラスを使うことができます。

あと気になるのがgccでの例外捕捉とか
[o error: "Error!!!"];でエラーは投げれるけどどうやってキャッチするんだろう?
http://gcc.gnu.org/とかgcc関連のメーリングリストは検索しました。
0023名無しさん@お腹いっぱい。 NGNG
20です。1さんへ逆質問。
Objective-Cについては、こちらではNT上でのApple OpenStep4.2の
みでの開発で、GNUStepなるものは触れたこともありません。ですので、
こちらに関しては1さんの方が詳しいだろうと思って質問します。
OpenStepのUNIXでの実装のことですが、UNIX+GNUStepでOpenStep4.2
のアプリは動くのでしょうか…。互換性に関する情報があれば、いただ
きたいです。GNUStepに、NSWindowとかNSConnectionなどのような
クラスはありますか? よろしくお願いします。
00241 NGNG
>>20 さん
私も逆にOpenStepなるものは触れたことも見たこともないのですが...(^^;;
NSWindow、NSConnectionとかありますよ。

GUIアプリケーションについてはチュートリアルなどがあるようです。
http://www.gnustep.org/
http://www.gnustep.it/nicola/Tutorials/WindowsAndButtons/node18.html

一度使ってみてはどうでしょう?
00251 NGNG
最後に聞きたいんですがとか言ってたけどまだ質問します。
Objective-CではJavaのabstract classは出来るんですか?
abstract classというのは
@メソッドが実装出来る。
@実装せずにインターフェース宣言だけも出来る。
@なのでインスタンスを作ることは出来ない。
このabstract classを継承するとその継承したクラスは
@インターフェース宣言だけのメソッドを実装しなくてはならない。
です。

とここまで書いててひらめきました!
abstract classをACと略します。

@interface "ACを継承したいクラス" : "ACの実装クラス"<ACのインターフェース>
とすれば疑似的に出来るかなぁ?
でもプロトコルを入れないとそのまま動いてしまいそうだ。
他に方法はありますか?
0026古いスレ上げてごめん。NGNG

Mac OS XのCocoa frameworkを使っています。

Clickしたり、Tabキーを押すとNSEventに対するResponderが変化しますよね。
これを変化しないように、Responderをあるオブジェクトに固定しておくには
どうしたら良いのでしょうか?

具体的にはキーボードイベントを、ある特定のウィンドウが常に受け取れる
ようにしたいと考えています。
0027ObjC見習い3ヶ月NGNG

26です。

http://www.fsinet.or.jp/~nito/OSPT/UsingText.html

ここにあるTextDemo.tar.gzをコンパイルしてみたのですが、上手く動きません。
キーの入力位置がNSTextFieldに戻らなくなってしまいます。
inputメソッドにある [respond makeFirstResponder:inputLine]; という行が
うまく処理されていないように思えるのですが、これはProjectBuilderのバグでしょうか?

タイピング練習ソフトの様な物を作りたいと思って、↑これを参考にしたいと思っています。

それとウィンドウをクリックしてもキー入力位置が変わらないようにするにはどうすれば
よいのでしょうか。御教示ください。お願いします。
00281NGNG
>>27
私はOPENSTEPもNEXTSTEPも持ってないので
http://www.tech-arts.co.jp/macosx/
あたりで聞いてみるとか、、、
0029デフォルトの名無しさんNGNG
>>21
Embedded C++というやつだから注意が必要です
サブセットなC++だから
0030デフォルトの名無しさんNGNG
>>29
テンプレートも使えないんじゃほとんど意味ないね。(ほぼライブラリ全滅でしょ)
デカイ言語はこれだから。
■ このスレッドは過去ログ倉庫に格納されています