トップページ⇒tech
1001コメント302KB

Objective-C

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん05/01/29 16:18:12
ほんとプログラマにとってはMacって
本当に興味が無いOSだよねw

Macでの標準的な言語であるObjective Cのスレすら無いし。
過去にはあったんだろうけど。
0809デフォルトの名無しさん2006/10/30(月) 22:55:46
デフォルトで~っていうのは、書かなくても @protected 扱いになるということだと思われ
エラー/警告が出るのは、他の class からインスタンス変数を @public として操作した場合の話じゃないかな
0810デフォルトの名無しさん2006/10/30(月) 23:03:19
220度くらいズレてる気がする
0811デフォルトの名無しさん2006/10/30(月) 23:09:34
適当な事を行ってすいませんでした m(__)m
0812デフォルトの名無しさん2006/10/30(月) 23:41:11
>>808
いつの間にか翻訳、英語版に追いついてるな。
ObjC 2.0でまた置いて行かれそうだが。
0813デフォルトの名無しさん2006/11/05(日) 02:24:57
インスタンスメソッドから、インスタンス変数と同名のグローバル変数へアクセスすることはできないのでしょうか?
早い話、

グローバル変数
const int foo = 100;

- (id)init {
[super init];
self->foo = foo;
return self;
}

上記のような感じでグローバル変数でインスタンス変数を初期化したいのです。
何か良い方法は無い物でしょうか?
0814デフォルトの名無しさん2006/11/05(日) 02:40:51
そのことやるくらいなら、マクロで初期値設定した方がいい
0815デフォルトの名無しさん2006/11/05(日) 02:49:14
すみません、正確には変数じゃなくて配列なんです。
元々はC++のソースで、namespaceで対応されている部分なのですが……。
やはり同名のグローバル変数にはアクセス出来ないのでしょうか?
0816デフォルトの名無しさん2006/11/05(日) 04:25:59
static int global_foo() { return foo; }
0817デフォルトの名無しさん2006/11/05(日) 04:30:18
Objective-C++ にして、普通にnamespace::varじゃいかんの?
手元で確かめずに言ってすまんけど。
0818デフォルトの名無しさん2006/11/05(日) 20:16:00
>>817
なるほど、Objective-C++という逃げ道がありましたね……。
何の問題も無くクリア出来ました。ありがとうございました。
0819デフォルトの名無しさん2006/11/06(月) 09:26:41
>>813
Objective-C++ じゃない場合でも以下でいけるんじゃね?
const int foo = 100;
static int getFoo(){ return foo; }
- init{
 self->attr = getFoo();
 return self;
}
0820デフォルトの名無しさん2006/11/06(月) 12:48:51
こんなのがあったべ。
http://www.informit.com/articles/article.asp?p=665128&seqNum=3&rl=1
GCC のテストスートにObjC2.0のサンプルコードがあるらしい
http://gcc.gnu.org/viewcvs/branches/apple/trunk/gcc/testsuite/objc.dg/
0821デフォルトの名無しさん2006/11/07(火) 17:06:10
がー。
Windowsで使えるObjCコンパイラってないの?Cygwin+gccは面倒い。
0822デフォルトの名無しさん2006/11/07(火) 20:38:03
つMinGW
0823デフォルトの名無しさん2006/11/15(水) 14:48:56
>820
クロージャが無いって明言されてるorz
0824デフォルトの名無しさん2006/11/15(水) 19:08:38
ObjCって今でもプリプロセス段階でCに変換されてるの?
0825デフォルトの名無しさん2006/11/15(水) 21:46:05
してないでしょ、多分>>プリプロセスでC変換
もししてたらインテルのコンパイラも使えるの?
0826デフォルトの名無しさん2006/11/15(水) 21:56:07
GCCとかではCに変換したりせずにそのままコンパイルしてるはずだけど、
Cに変換するプリプロセッサも出回ってるからそれ使えばIntelのC/C++ Compilerも使えるかと。
0827デフォルトの名無しさん2006/11/15(水) 22:05:50
クロージャー無いのか、残念だ

Smalltalkでdo:メソッド見たときは感動したんだよな
0828デフォルトの名無しさん2006/11/15(水) 22:19:07
ifTrue:メソッドとかやりすぎw>>SmallTalk
0829デフォルトの名無しさん2006/11/15(水) 22:33:37
確かにw
でも至るところにデザインパターンを見ることができて面白いよね
Booleanクラスに何もしないifTrue:とifFalse:を定義して
TrueクラスのifTrue:がクロージャーを評価し、
FalseクラスのifFalse:がクロージャーを評価する


ここまでObjective-Cに求めるつもりはないけど
クロージャーを導入するとどうしてもよりSmalltalk化しちゃいそうだね
0830デフォルトの名無しさん2006/11/15(水) 23:39:48
>>828
アラン・ケイもそんなふうに言っているよね。彼の手を離れてからずいぶんとLISP化しちゃったから。
0831デフォルトの名無しさん2006/11/15(水) 23:44:56
ケイは message passing style の発案以外で Smalltalk に対して何かしたんだっけ?

クロージャは今回入らなかっただけで、いずれ入ると思うよ。
0832デフォルトの名無しさん2006/11/16(木) 00:22:53
>>829
茶々入れでスミマセン。

厳密には Boolean に定義されている #ifTrue: と #ifFalse: はあくまで仮想メソッド、
つまり、サブクラスで再定義されることが期待されるメソッド…という位置づけになっていて
(C++ のオブジェクト指向の影響)、引数ブロックを無視する #ifTrue: や #ifFalse: は
False、True クラスにそれぞれ普通に再定義されています。現実は、あまりおもしろみがないですね。

もっと夢のない話をすると、メッセージ ifTrue: [] や ifFalse: [] はコンパイル時にはインライン展開されて
しまうので、実際にはメソッドとしての #ifTrue: や #ifFalse: がコールされることはなかったりもします。
(なので、#ifTrue: や #ifFalse: の定義を書き換えるイタズラをしても、実際には何も起こせません)。
0833デフォルトの名無しさん2006/11/26(日) 18:12:51
ja.wikibooks.orgにはObjective-Cの記事がないのな。
0834デフォルトの名無しさん2006/11/26(日) 21:16:51
抽象クラスとプロトコルってどう使い分ければいいの?
0835デフォルトの名無しさん2006/11/27(月) 01:12:06
抽象クラス(Objective-Cに抽象クラスという仕様はないから、単なるクラスだが)は継承しないと使えない。特定の実装を強制させるなら抽象クラス。
実装は各クラスで好き勝手にしていいか、すでに他のクラスを継承していて抽象クラスを使えない場合はプロトコル。利便性を考えて、プロトコルの参考実装として抽象クラスを用意することもある。

使い分けようとしなくても、実装を何度も見直すうちに自然と使い分けられるようになると思うよ。
0836デフォルトの名無しさん2006/12/03(日) 00:19:53
gdbでObjCのメソッド名指定でブレイクはることは、できないのでしょうか?
ライン指定は出来ます。
gcc 4.0.1-Apple
gdb 6.3.5-Apple


0837デフォルトの名無しさん2006/12/03(日) 07:06:16
ttp://developer.apple.com/technotes/tn/tn2032.html

> Objective-C method: b -[Foo bar], or for an action method example, b -[Foo bar:]
0838デフォルトの名無しさん2006/12/04(月) 22:16:51
返事できなくてすみません。
メッセージ呼び出しとおなじ書式なんですね。
失礼しました。
0839デフォルトの名無しさん2006/12/31(日) 01:55:01
書き始める前に何重のネストになってるか明確でないとダメなのがイマイチな気がする。
見た目だけでも、メジャーな言語風だったら、かなり敷居が下がると思うんだけど。
この書き方のメリットって、何かあるの?。
0840デフォルトの名無しさん2006/12/31(日) 11:43:19
まあ、Objective-C が出来た頃はどのオブジェクト指向言語もメジャーじゃなかったので、ね...
そんなに見た目って敷居になるのかな?Cocoa と他のクラスライブラリの違いのほうが余程問題だと思うけど...
たとえば Cocoa Java があったけど、だからといってそんなに書きやすかったかというと疑問。
[[[ の数がはじめに判らないのが面倒なのは同意。メリットは、つねに引数に名前が書いてあるので、あとで読んだときになにをやっているかが分かりやすい、かな。
0841デフォルトの名無しさん2006/12/31(日) 17:33:20
Smalltalkという超メジャーなオブジェクト指向言語風の書き方じゃないか。
0842デフォルトの名無しさん2006/12/31(日) 18:25:56
Smalltalk は [ ] はなかったんじゃなかったっけ?
というか、[ ] はあったけどそれはクロージャだったので、用途が違ったんでは...
0843デフォルトの名無しさん2006/12/31(日) 23:52:38
Objective-Cってリフレクション以上に動的な事できるよな?
0844デフォルトの名無しさん2007/01/01(月) 00:04:54
ポージング (Posing) とかできますよ
http://journal.mycom.co.jp/column/objc/012/
メソッドスウィズリング (Method Swizzling) とかも。
http://www.cocoadev.com/index.pl?MethodSwizzling
まあランタイムのAPI呼べば何でも出来ます。
0845デフォルトの名無しさん2007/01/01(月) 00:18:35
>>844
ありがとうございます。ランタイムの弄りかたさえわかれば何でも出来るのか。
0846デフォルトの名無しさん2007/01/02(火) 01:57:16
>>842
[ ] はなかったけど、
  receiver selector:arg
って形は同じでしょ。
0847デフォルトの名無しさん2007/01/02(火) 06:22:38
見かけだけはね
0848デフォルトの名無しさん2007/01/02(火) 08:22:31
見かけは重要だ。つか、内部的にも一緒なんじゃないの。
動的言語のメソッド呼び出し方法なんて一種類しか無いような。
0849デフォルトの名無しさん2007/01/03(水) 22:45:09
emacかXcodeつかって仰山のソースコードのインデントを一括で行う方法ってありませんか?
いっこいっこ開いてメニュー選ぶのかったるいです。
0850デフォルトの名無しさん2007/01/03(水) 23:23:38
emacsならelisp書けばよか
0851デフォルトの名無しさん2007/01/03(水) 23:37:09
>>850
emacs elisp インデント
などとGoogleで検索してみましたがよくわかりませんでした。
当方少しのコマンドラインなら打てます。例えば
find . -name *.m -exec emacs -batch -indent {} ¥;
などといった簡単なやり方ではなくて、何か特殊な方法なんでしょうか?
0852デフォルトの名無しさん2007/01/04(木) 02:00:27
スレ違いだボケ
0853デフォルトの名無しさん2007/01/04(木) 05:56:55
emacs インデント
でぐぐればいいんじゃないかな。
http://www.bookshelf.jp/texi/emacs-20.6-man-jp/emacs_21.html
もちろんObjective-Cモードにしてね。
0854デフォルトの名無しさん2007/01/04(木) 11:44:55
>>853
ありがとうございます。
それみても私の理解不足で、エディタ内で行う編集作業のコマンド集にしか見えないです。

>>852
ごめんなさい。
すれ違いとのことで以降はemacsスレッドを探してそこで聞いてきます。
0855デフォルトの名無しさん2007/01/04(木) 22:07:54
Objective-C に対応したソースコード整形ツールって無いのか。
0856デフォルトの名無しさん2007/01/04(木) 22:11:43
>>855
NeXT Step には独自改良版の GNU Indent が対応していたそうですがそれ以外だと単体の整形ツールは存在しません。
現状私の知る範囲ですとXcode、emacsなどの「エディタ」のソース整形機能を引っ張ってくるほかないです。
0857デフォルトの名無しさん2007/01/04(木) 23:15:25
>>856
NeXTが独自改良したならばソースがどっかにころがってんじゃねーの?
GNUって逝ってんだから。

ぐぐっても出てこなかったけど(w
0858デフォルトの名無しさん2007/01/04(木) 23:56:07
だれかこれを改造してObjective-Cでも使えるようにしてくれ
動的な言語だと難しいかもしれんが
ttp://www.tamacom.com/global-j.html
0859デフォルトの名無しさん2007/01/08(月) 14:16:12
MacPortsで試しにGNUStepを入れてみたけど、これってなんとなく手作り感が
出てて良いね。
でも、ProjectCenterの*.gormをクリックしても、Gormの起動に失敗してしまう。
何か設定とかあるのかな。
0860デフォルトの名無しさん2007/01/13(土) 00:09:59
>>859 です。
*/System/Applicationsにパスを通してできました。

一応簡単なサンプルを作ってみたんだけど、
あまり期待してなかったのもあったから、使ってみてxcodeとほとんど同じような感じで使えて
予想以上に便利なんでびっくりした。
これってLinux等のGUIアプリの作成でもうちょっと普及してもよさそうだけどな。
0861デフォルトの名無しさん2007/01/25(木) 12:35:54
xcodeってjavaはどの程度サポートしてるの?
0862デフォルトの名無しさん2007/01/25(木) 17:58:12
Xcode part4
http://pc9.2ch.net/test/read.cgi/mac/1149300142/
0863デフォルトの名無しさん2007/01/25(木) 18:23:40
thx
0864本田2007/01/25(木) 19:47:35
>ディベロッパー:Windows環境下でMacのAPIによるコーディングを可能にするCocotron
http://opentechpress.jp/developer/article.pl?sid=07/01/23/0121247

>COCOTRON
http://www.cocotron.org/
0865デフォルトの名無しさん2007/01/25(木) 21:04:50
Cocoaスレでとうの昔にガイシュツ
0866デフォルトの名無しさん2007/02/22(木) 20:50:41
oneway voidって別に
メソッドを別スレッドで実行するわけではないよね?
0867デフォルトの名無しさん2007/02/23(金) 08:29:29
使ったことないけど、そういうことじゃないんじゃない?
リモート側の応答を待たないだけということじゃないかな。
実は別スレッドで受信待ちして、デリゲートで通知とかあるのかもしれないけど。


0868デフォルトの名無しさん2007/02/23(金) 14:35:39
そういうことじゃないんじゃないんじゃないかな?
0869デフォルトの名無しさん2007/02/23(金) 16:25:24
分散オブジェクトのときのみ使用されます。
NSConnection 使わなければまったく意味はないです。
0870デフォルトの名無しさん2007/02/24(土) 15:28:13
Apple Inc.、Objective-Cの商標登録出願
http://www.appleinsider.com/article.php?id=2519

これまた問題にならないかね。
0871デフォルトの名無しさん2007/02/24(土) 20:04:22
なんでそういうわけ解らんことするんだろうねアップルは
0872・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 2007/02/24(土) 21:41:36
DRM反対を唱える一方で自らも版権ゴロか
0873デフォルトの名無しさん2007/02/24(土) 22:15:01
糞ダンゴは去ね。
0874デフォルトの名無しさん2007/02/26(月) 02:04:30
わざわざ商標なんて取らなくたって、
誰もObj-Cなんて名前の製品出さないってば。
0875デフォルトの名無しさん2007/02/26(月) 11:13:24
実質的にまともに商用利用してるのAppleだけだしね
まぁコンパイラはgccだし将来的に使うやつが万に一つくらいで
出てくるかもしれないとかで取ってるのかねぇ…
0876デフォルトの名無しさん2007/02/26(月) 12:49:51
1995年に、開発元のStepstone社から、NeXT社が言語と商標を買い取ってる。
Appleが商標を取得しなおす理由はよく判らない。
http://ja.wikipedia.org/wiki/Objective-C
0877デフォルトの名無しさん2007/03/01(木) 15:45:11
>>876
http://www.apple.com/legal/trademark/appletmlist.html
"Objective-C"は登録されていない商標。
0878デフォルトの名無しさん2007/03/02(金) 01:21:47
でも、例えばボーランドがObj-Cコンパイラを作ったら、
"Borland Objective-C (TM) Compiler"
みたいな名称になるんでしょ。
0879デフォルトの名無しさん2007/03/02(金) 02:03:45
「Redmond, start your photocopies.」
なーんて言ってたら、マジでVistaでCore Audioをまんまパクられたから
焦って商標を取得したとか?
0880デフォルトの名無しさん2007/03/02(金) 15:07:39
そもそも言語名って商標として登録できんの?
よくわからんのだけど、SunがJavaの商標を持ってたりMSがC#の商標持ってたりするの?
0881デフォルトの名無しさん2007/03/02(金) 16:42:13
いや、そりゃ持ってるだろ。MSは知らんけど昔のSunはJavaをかなり厳格に管理してた。
0882デフォルトの名無しさん2007/03/28(水) 18:37:41
Objective-CでWin32アプリ書こうかと思ったんだけど、
そもそもWindowsで使えるObjective-Cの処理系ってある?
0883デフォルトの名無しさん2007/03/28(水) 18:51:42
GNUstep
0884デフォルトの名無しさん2007/03/28(水) 21:17:48
Objcの処理系って意味なら gcc でOK。
# ってか他にまともに動く処理系ってある?
0885デフォルトの名無しさん2007/03/28(水) 21:19:16
MinGWのObjective-CでWin32API使って書いたほうが
今のところは実用的だと思うけど
0886・∀・)っ-○◎●2007/03/29(木) 01:28:09
Cで十分ってことじゃんそれ
Win32のメッセージAPIまわりがObj-Cのメッセージに綺麗にラップされてるならまだわかるが
0887デフォルトの名無しさん2007/03/29(木) 02:48:14
>>886
まぁまったくその通りだと思うのだが>>882がラッパを書いてくれればOK
0888デフォルトの名無しさん2007/04/02(月) 21:18:45
文字列オブジェクト定数に使われるクラスに自作のクラスを使えない?
コンパイラオプションにあるあらかじめ用意されたクラスしか使えないの?
0889デフォルトの名無しさん2007/04/03(火) 02:18:05
>>888
http://www.mhatt.aps.anl.gov/dohn/programming/gcc/gcc_7.html#SEC158
こういう話?
0890デフォルトの名無しさん2007/04/05(木) 20:17:50
>>889
それそれ!
どうもありがとうございます!
0891デフォルトの名無しさん2007/04/13(金) 12:39:32
Cocoaプログラミングの無料セミナー開催
今月4月にCocoaプログラミングの無料セミナーの初級・中級・上級を東京初台
のアップルセミナールームで開催し ます。次期OS Leopardには、Objective-Cの
APIのみで提供される新機能がたくさ んあります。今後、Cocoaの習得はMac OS
ソフトの開発に必須となります。是非 この機会をご活用下さい。講師はHMDTの
木下誠さんです。
http://developer.apple.com/jp/rss/adcjapan.rss
0892デフォルトの名無しさん2007/04/22(日) 20:16:44
今更の質問かもしれないですが、NSURLConnectionで2chデータの差分を取得しようとした時に416エラーが返ってくるのをどう解釈して良いのか分からず困っております。
NSURLRequest内容:
{
Accept = "text/plain";
"Accept-Encoding" = "gzip, deflate";
"Accept-Language" = ja;
"Cache-Control" = "no-cache";
Connection = close;
Host = "news21.2ch.net";
Pragma = "no-cache";
Range = "bytes=6198-";
Referer = "http://news21.2ch.net/namazuplus/subject.txt";;
"User-Agent" = "Monazilla/1.00 (Jane/0.01)";
}

NSURL内容:http://news21.2ch.net/namazuplus/dat/1177098491.dat

他方、cURLで取得しようとするときちんと差分が取得できます。
curl -H 'Range: bytes=6198-' -v -A 'Monazilla/1.00 (Jane/0.01)' -H 'Accept: text/plain' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Connection: keep-alive' http://news21.2ch.net/namazuplus/dat/1177098491.dat
0893デフォルトの名無しさん2007/04/23(月) 08:06:01
NSURLConnectionではヘッダー部分の、特にHTTP/1.1とかのパラメーターが触れないので、
この辺が原因なのでしょうかね、ほかに何かおかしな事をやってるのでしょうか、
NSURLConnectionのバグ?
0894デフォルトの名無しさん2007/04/23(月) 16:50:01
NSURLRequest の内容と
curl に渡している物が違うのはわざとですか?

ステータスコード 416 の意味は何かご存知ですか?

Accept-Encoding : gzip の場合は何が起こりますか?


NSURLConnectionのバグだと思うのでしたらバグレポート出せばよいと思いますよ。
0895デフォルトの名無しさん2007/04/23(月) 20:05:10
416は範囲がそれているという意味でしょ、んでConnection = closeでもConnection = keep-aliveでも
ストリームで受け取る場合に挙動はかわらないっぽいです。
curlでAccept-Encoding : gzipを付けなかったのは-vで出されるヘッダフィールドはzipがかからないと考え、
gzip に渡して解読できないかもと思ったからで、416の本筋ではないです。

ヘッダを全くそろえても、NSURLConnection側のみ416エラーが出てます。
ただし、Range設定しない場合はきちんとダウンロードできます…。

今はとりあえずCore Foundationで直読みできるかどうか試してるところです。
0896デフォルトの名無しさん2007/04/23(月) 20:12:25
>>894
つまりcurlのverboseを見るため、意図してAccept-Encodingヘッダを飛ばしてます。

416とはRange指定範囲が本体の範囲から外れている事を意味していると思うのですが、
もし違う解釈があるのなら指摘いただけるとありがたいです。
curlでは正常に範囲指定が受け付けられているのに、NSURLConnectionでは範囲外と返ってくる。
ヘッダ情報が微妙に違うのか、何が原因なのかよくわからないのです。
0897デフォルトの名無しさん2007/04/23(月) 22:37:46
tcpdumpとかでヘッダを覗いてみたらすぐに解決するんじゃない?
0898デフォルトの名無しさん2007/04/24(火) 12:55:18
Accept-Encoding : gzip に答えてサーバーが gzip してコンテンツを返す
かつ
レンジ指定の場合
そのレンジは”何に対して”のレンジでしょう?

元のコンテンツですか?違いますか?
違う場合は、何に対してですか?
0899デフォルトの名無しさん2007/04/25(水) 08:09:24
>>898
curl -H 'Range: bytes=6198-' -A 'Monazilla/1.00 (Jane/0.01)' -H 'Accept-Encoding: gzip, deflate' -H 'Accept: text/plain' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache'
-H 'Connection: keep-alive' http://news21.2ch.net/namazuplus/dat/1177098491.dat | gzip -d -c

curl: (18) transfer closed with outstanding read data remaining
あれ、zip元のデータ長ではないのですね…
0900デフォルトの名無しさん2007/04/25(水) 22:09:45
2ch の dat を差分取得しようとするときに誰もがはまる罠です。

不意のコネクション切断等のときに、
その続きを取得する時のことを考えれば、
この動作が”正しい”ことが分かると思います。

http コンテンツで 2ch の dat の様に差分を取得できる物って
そんなに無いと思いますよ。
0901デフォルトの名無しさん2007/04/29(日) 22:42:59
selfでないインスタンスオブジェクトに対して->を使って
@protectedまたは@publicなインスタンス変数にアクセスするのって
お前ら的にはどうなの?
0902デフォルトの名無しさん2007/04/29(日) 22:48:35
そういうおまえはどうなのよ
0903デフォルトの名無しさん2007/04/29(日) 23:40:48
インスタンス変数fooがあったとして、
メソッド内でselfを書き換えるとself->fooはもちろんとして
修飾なしのfooも実体が書き換えた後のインスタンスのインスタンス変数になるみたいなのですが、
これって処理系(gcc)依存の挙動でしょうか?それとも言語規約通りの挙動でしょうか?
すなわち、メソッド内において(& foo == & self->foo)が常に成り立つのでしょうか?
0904デフォルトの名無しさん2007/05/05(土) 03:16:03
《プログラミング言語の本来あるべき正しい進化》
C言語→Objective-C→D言語

《忌まわしき現実》
C言語→C++→JAVA→C#
0905デフォルトの名無しさん2007/05/05(土) 04:36:28
>>904
《忌まわしき事実》
C++(膨張した言語仕様への反省)→Java(もっと簡素・洗練しろ!)→C#
0906デフォルトの名無しさん2007/05/05(土) 06:41:41
《とりあえずそれなりの仕事になった順番》
C → C++ → Perl → ASP → PHP → Ruby → Java
0907デフォルトの名無しさん2007/05/05(土) 09:17:03
そしてNemerleの時代へ
0908デフォルトの名無しさん2007/05/05(土) 13:28:30
Visual Objective-C出たら考える
レス数が900を超えています。1000を超えると表示できなくなるよ。