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


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

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

101 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:56:14 ]
@propertyってメンバ変数のアクセス「.」と同じようなもん?


102 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 15:04:39 ]
ドキュメントによると、
id x; に対して、
x.area = y; は [x setArea: y];
y = x.area; は y=[x area];
と全く等価だそうです。
public メンバにアクセスするには
x->area
とか書かないといけないはず。(やったことないのでわからないけど。)

@interface 内で @property をつかってそういうのを宣言して、
@implementation 内で @synthesize をつかってアクセッサを生成するみたい

アクセッサをつかう重要な点は、そうしておくと KVO というか binding が効くということ。area がなんか GUI にバインドしてあると x.area = 10; とかすると GUI の表示が自動的にかわる。

103 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 16:45:55 ]
どうでもいいけど、ObjCオブジェクトのインスタンス変数を@publicにしてる奴なんて
見たことないぞ。

104 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:36:24 ]
Rubyでいい気がする

105 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 05:13:51 ]
>>104
ネイティブコード吐けるようになったらまたおいで

106 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 06:26:40 ]
ObjC も [] の中はネイティブコードじゃないと言っても過言じゃないかと…

107 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 08:49:32 ]
KVO とか内部で無茶苦茶やってるよね。isa-swizzling とか。
正気の沙汰じゃない。

108 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:14:13 ]
でもネイティブコードには変わりないんだよ

109 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:52:58 ]
分かってないべ?



110 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 11:52:34 ]
なかなか楽しいけどね。

RubyCocoaでWebページ表示
japan.zdnet.com/sp/feature/07leopard/story/0,3800081890,20359550,00.htm


111 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 18:16:17 ]
GCC3.3で、例外を投げると値を返すはずのメソッドが値を返してなくても警告が出なくなるのな。

112 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 10:17:28 ]
Objective-C 2.0プログラミング言語
developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjectiveC

113 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 13:38:27 ]
twitter.com/implementation

114 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 20:47:50 ]
Leopard の objc/Object.h 見ると、2.0 では Object クラスはさぶくなってるのね。
「ルートクラスには NSObject 使えよゴラア」という意味でしょうか?

115 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:51:11 ]
保守

116 名前:デフォルトの名無しさん [2008/01/06(日) 21:53:31 ]
Objective-C

117 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:47:16 ]
windowsの環境だとgnustepやっぱり普通はですかね。
gunstepがないPCには、ランタイムとかどうやって持ってけばいいのか…

118 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 17:42:24 ]
これを読むとシアワセがくるかも。
ttp://mediawiki.gnustep.org/index.php/Deployment_on_Windows
ttp://www.gnustep.org/resources/documentation/User/GNUstep/README.MinGW

まとめると
- exe本体と同じディレクトリ階層に関連するdllを全部集める。
- gnustepが使う各種パスをソレに応じて書き換える。
の2点で出来るらしい。


119 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 18:23:06 ]
日本語の情報が少ないと思ったら英語に活路があったんですか。
shipping するときは他のPCの方にもmsys, mingw(gcc) がないとダメってことですか?
それとgunstep runtime の最小サイズが書いてませんでしたが、どれほど必要でしょうか。

objc はjava の源流なんで非常に興味あったんですけど、mac に取られてばっかりで
どうして日本だとwindows な環境で広がらないんでしょうね。
objc はまだ趣味の範囲ですけど。



120 名前:118 mailto:sage [2008/01/07(月) 23:44:08 ]
README.MinGWの方の8.Cleanupに

First thing, you should remove the MSYS libraries, which we never use --

rm Gomoku.app/msys-1.0.dll
rm Gomoku.app/msysltdl-3.dll
rm Gomoku.app/libW11.dll
rm Gomoku.app/libperl.dll
.
.
と書いてあるからgccは必要ないですよ。

runtimeのサイズだけど、IntelMacにしてVPCが動かずWinが触れないので判らん。
winがらみの仕事がくればVMWareとか購入してこっちの遊びも再開出来るけど(w




121 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:05:01 ]
>>119
>どうして日本だとwindowsな環境で広がらないんでしょうね。

Cocotron があるじゃん

Java は ObjC というよりは OPENSTEP をやりたかったんだろうね

122 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:10:11 ]
あ、日本じゃないか。
日本人は何故かみんな C++ が大好きだからねえ。

123 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:22:35 ]
macがらみの仕事てのが想像できませんが、なんかスゴイ仕事してそうですねw
>122は日本ではPC(ソフト)に興味ないし、もともとの発祥が英語圏で、MAC-OSでもMS-OS支配でも別にどうでもいいからじゃないですか?
ハード(日立・富士通・NEC・ソニーとか)の方は支配にこだわっていて、そうでもないですけど。
macの仕事て例えばどういうのがあるんでしょうか?

124 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:28:28 ]
みんながC++みたいな変態が好きなんじゃなくて、それしか選択肢がないからじゃないですか。
objcの情報も日本語では少ないし、紹介すらしてない。
説明や紹介が英文よりも日本文に目がいくようなら、そんな日本人の英語力なんてないに等しいし…
objcはmacだけじゃもったいないような、なくないような…
すくなくともwindows環境の人にはmac objc runtimeは使えないわけなんで。

125 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 08:02:16 ]
別にみんなC++好きの変態なんじゃなくて
「みんなが使ってるものと同じものを使ってれば安心」
ってことだと思うよ。要するに保守的。
# Microsoft Visual Objective-C とか出れば騙されて使うやつがいるかも?

126 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 08:07:58 ]
C++なら日本語情報が多いし入りやすいよ

ワンチップマイコンでも
日本では素直なAVRよりも変態といわれてるPICのユーザーが多いのは
日本語情報の多さ

127 名前:118 mailto:sage [2008/01/08(火) 20:42:28 ]
c++はそんなにキライじゃないけどな。
templateとマクロを駆使して"俺C++"を作る楽しみがあるし、他人が作った"俺C++"をみてcoreDumpする
楽しみもある(w

ObjCの変態実装系としてWebScriptと言うインタプリタが過去にあったそうだ。今だったらインタプリタ
として受けそうだと思うが、おまえらどうよ。


128 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:49:30 ]
変態実装系はPOCで十分です。
あれまだあるんだっけ?

129 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 22:38:48 ]
ttp://users.pandora.be/stes/compiler.html
これ?



130 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 22:39:05 ]
>>126
AVRはいいよねー。
PICみたいなドM用アーキテクチャが流行ってるのは、本が多いからかなー?
まあAVRは比較的新しいからこれからじゃないすかね。
AVRが出たころにはもうPICに慣れ切ってる人が多かったわけですし。

131 名前:118 mailto:sage [2008/01/08(火) 23:18:26 ]
POCと言えば、このURLのブロック構文がつかいたいよな。
ttp://users.pandora.be/stes/block98/index.html

AppleもObjC2.0の時に一緒にしてくれれば良かったのにな。
for(i in array){}よりも汎用性がありそうなのに。



132 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:19:14 ]
Objective-CだけでもC++だけでもなくて、Objective-C++サイコーなやつは居らんのですか。

133 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:01:49 ]
>>132 ずいぶんコアなところにおりますなw

134 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 02:02:39 ]
OpenCVとか組み込みてーけど、どうだろね

135 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 12:12:51 ]
ipodの組み込みとかは当然mac objcで開発なのかな?

136 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 15:59:13 ]
touchのことならObjCだよ。

137 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:46:55 ]
Mac OS X 版の GLUT, SDL, Gtk+ は Objective-C の API を
C でラッピングしてるのね。wxWidgets も Cocoa への移植が
進行中らしいけど、世の中変わったもんだねえ。

138 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 10:14:37 ]
Cocotronの日本語対応させた人います?
ソース見た限り、全キーストロークをストローク単位で
処理しているようで、キーダウンイベントの発生時に
日本語処理を割り込ませればとも思っているんですが
Windows側のこともよく分かりませんし...

139 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 01:55:37 ]
最近魅力的なんですけど、RubyとD言語はやっぱりダメですか?



140 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 02:00:18 ]
どの言語でも一つだけで済ませようとするのは良くない
とりわけマイナー言語では、その言語がこけても困らない
様にしておく必要がある

Ruby やるなら Perl や Python を横目に見ながら、D を
やるなら Java や C++ を意識しながらやると良いよ

141 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 02:12:12 ]
さもないとこんな風になっちゃうの?
pc11.2ch.net/test/read.cgi/tech/1200070152/59


142 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 02:22:34 ]
CとJava使っています。
コンパイルなしでスクリプトしたいんですけど、どっち使ってますか?
正規表現処理したいのにCやJavaはちょっと・・・

143 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 02:24:14 ]
>>140
MSの.Netはいいの?
JScript, C#
w

144 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 14:11:22 ]
.Net
C#
Javascript
こいつらは論外


145 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 14:15:35 ]
おやおや
可哀相に

146 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:24:18 ]
只今ECMAScriptのコーディングの真っ最中な俺が来ましたよ

147 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:49:31 ]
Javascript はめちゃめちゃ dynamical だから、Cocoa との binding ぐらいすぐ出来そうな気がする ...

148 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 19:19:22 ]
ajaxだったか最近聞かないなw
rhinoみたいにブラウザとかに内蔵しないで、シェル上で独立に実行できる
と爆発的に普及するんじゃないか。

149 名前:デフォルトの名無しさん [2008/01/14(月) 20:16:49 ]
javascriptはOpenOfficeでVBAの代わりに使えればいいのに、と思うことはあるな
べつにrubyとかでもいいし、shell自体がつかえてもいいけど>>VBAの代わり



150 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 20:30:18 ]
OOoでPythonは使える


151 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:11:43 ]
>>148
Jscriptならwindowsに統合されててwshとかでも使えるけど
web以外で使われてるのあまり見ないな

152 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 22:09:09 ]
jsは、今までアプリに組み込み式で、独立のインタプリタ(CUIなどシェルから起動式)がないからだろうな。
最近出てきたけど。

ruby, perl, dと見てみたけど、jsが一番良さそうだと直観した。
あまりうだうだ言うのめんどいけど、jsは規格委員会(ECMA)があるってのがそれぞれの違うってことを表している。
その他は所詮は宗教臭い。

153 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 22:13:05 ]
それと、javaをよく使うけど、javax.scriptはjsと連携いいし
javaライブラリとシームレス連携、htmlブラウザとシームレス。

文法もほとんどjava, c風で組み込みライブラリも少なく習得が早い。
オレが欲しい仕様を全て満たしてる。
スクリプトなんて使うときは手早くハックするときぐらいだしw

154 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 22:55:02 ]
まあ言わんとしている事はわからないでもない
俺もタマリンが完成した暁には乗り換えようと思っている

155 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 23:41:34 ]
ECMAScript と JavaScript と JScript と ActionScript の
違いを理解してから出直してきてください

156 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 23:44:47 ]
>>155
そういうのは分かってるだろ。こだわってるのはおまえだけw

>独立のインタプリタ(CUIなどシェルから起動式)

ところで独立インタプリタ?てそんなのあるの?
Javaの奴はjde入れないとダメでしょw

157 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 23:45:15 ]
ここは一応 Obj-C スレなので、とりあえず Javascript 用の Cocoa bridge をつくってから出直してきて欲しい気がする

158 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 23:48:28 ]
そんなに需要あるのかあ

159 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:04:14 ]
というか WebKit の Javascript Core が公開されてるので、Cocoa bridge は簡単につくれるのでは?Leopard なら Scripting Bridge も提供されてるし。

いってみただけで技術力がたりないから僕には出来ないけど。スイマセン ...



160 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 05:35:33 ]
>>155
出直してくるのはおまえのようだ

161 名前:118 mailto:sage [2008/01/16(水) 13:28:06 ]
>>157
Joyと言うのがあったそうだ。
www.mactech.com/news/?p=1001039
javascriptのcocoa bridge

で、今ではオープンソースで転がってそうな感じだけど、どうなったかだれかしらない?



162 名前:118 mailto:sage [2008/01/17(木) 17:07:23 ]
こんなの見つけた。
Scripting with JavaScript in Cocoa
will.thimbleby.net/script/

TurtleScript.zipがレパードだとうまく動かないけど以下の修正ですぐに動く。

ScriptControl.mのメソッド
- (void)awakeFromNib

scriptObject = [webView windowScriptObject];
を追加。で、
- (void)webView:(WebView *)sender windowScriptObjectAvailable: (WebScriptObject *)windowScriptObject
を要らないので削除



163 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:39:16 ]
おもろいもんですな。
Cocoa というオブジェクトを javascript 側に publish して、
Cocoa.NSTextView とかいうメソッドを呼ぶと
NSClassFromString とかでクラスオブジェクトを返すようにしておくと、
もはや Javascript から何でも出来る気がする。

164 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 15:00:53 ]
まぁ面白いといえば面白いが…
Cocoa bridge があったとしてもスレ違いだ…

165 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:55:05 ]
Xcode part6
pc11.2ch.net/test/read.cgi/mac/1201693264



166 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 10:17:19 ]
すごい寂れぶりだな…

167 名前:デフォルトの名無しさん mailto:hage [2008/03/15(土) 23:22:05 ]
>166
さすがマイナー言語www
ttp://www.moongift.jp/category/programming-language/object-c/
ttp://d.hatena.ne.jp/Psychs/20070703/1183415019

168 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:24:18 ]
マカーでもない限り使わないし、
そのマカーでも使うとは限らないしな。

169 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:25:52 ]
これからは iPhone/iPod touch の開発でひっぱりだこになると思われ。
すくなくとも日本以外、米欧では。



170 名前:デフォルトの名無しさん mailto:hage [2008/03/15(土) 23:32:25 ]
制約ありまくりのSDKが成功するとでも?

171 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:49:08 ]
乞食プログラマ乙

172 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:46:16 ]
>>168
俺はObjective-CがやりたくてWinからMacに移行したけどな。まあ、完全にWinを離れる訳にもいかないんだが...

173 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 07:54:23 ]
SDK の制約といっても普通のソフト書く分にはもんだいないでしょ。
IM とか VM とかいうけど、開発者のうち何人がそんなものを作るかと。
2ch ブラウザならいまの SDK で何の問題もなく作れるよね。
5分ごとに更新とかは出来ないわけだが。

174 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:12:52 ]
>>173
今のiPhone SDKは「実機で動かせない」という致命的な制約が…

175 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:48:50 ]
それには同意。

176 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:38:02 ]
日本はそんなに魅力的な市場じゃないんだろうな。

177 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 11:41:28 ]
日本の携帯は国内仕様てんこもりで鎖国状態だからな。
それを乗り越えてまで参入するメリットは「?」だよな。

178 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 12:29:58 ]
欧米仕様(OMAとかMIDPとか)すら無視してるんだから
日本仕様も乗り越えず素通りするだけだろ

179 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 16:22:42 ]
今、ObjCを勉強中ですが、autorelease以外で、boostのshared_ptrみたいなものはないのですか?
retain, release, autorelease方式だと、メモリーリークしまくりそうです。



180 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 16:28:29 ]
こういうの嫌すぎるし。
× NSArray* arr = [[NSArray alloc] initWithObjects: [[Card alloc] init], [[Player alloc] init], nil];
○ NSArray* arr = [[NSArray alloc] initWithObjects: [[[Card alloc] init] autorelease], [[[Player alloc] init] autorelease], nil];


181 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 16:53:04 ]
@implementation Card
+ (id)card
{
return [[[self alloc] init] autorelease];
}
@end
とすれば多少は。

[[NSArray alloc] initWithObjects: ...

[NSArray arrayWithObjects: ...
で。

182 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 02:02:58 ]
> retain, release, autorelease方式だと、メモリーリークしまくりそうです。

気のせいです。

183 名前:デフォルトの名無しさん [2008/03/20(木) 08:28:28 ]
>>180
> こういうの嫌すぎるし。
> × NSArray* arr = [[NSArray alloc] initWithObjects: [[Card alloc] init], [[Player alloc] init], nil];
> ○ NSArray* arr = [[NSArray alloc] initWithObjects: [[[Card alloc] init] autorelease], [[[Player alloc] init] autorelease], nil];
>

そこで LISP ですよ。[] なんて特に気にならなくなるよ、LISP をすると

184 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:55:32 ]
ObjC2のmethod_setImplementation()って昔のポージングと同じで
対象のクラスが1度も使われる前に行わなきゃいけないの

185 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:56:22 ]
ですか?

186 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 21:02:12 ]
>method_setImplementation
べつにいつでもいいと思いますが、呼び出し側がセレクタに対する IMP の結果をキャッシュしてたりするとおかしくなるのでは。

187 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:41:17 ]
stringWithUTF8String に渡す文字列は、同一スコープに実体がないと
いけないなどの制限があるのでしょうか?

#include <string>
#include <Foundation/Foundation.h>
std::string foo() { return "foo"; }
const char* bar() { return foo().c_str(); }
int main() {
NSString* str = [NSString stringWithUTF8String:bar()];
NSLog(@"bar()=%s", bar());
NSLog(@"str=%@", str);
}

・実行結果
bar()=foo
str=

bar() の結果を std::string に保持して c_str() を渡せば成功します。
この挙動でどつぼにはまりました。

188 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 12:34:22 ]
>>187
何がしたいのかわからないけど、こう書き換えれば動くと思う。

const char* bar() { static std::string temp = foo(); return temp.c_str(); }

foo()が返した値がどこまで有効なのかを考えてみようよ。「bar()=foo」と
表示されたのは運がよかっただけ。

189 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 12:42:28 ]
まず Cocoa つかうときは NSAutoreleasePool つくること。
次に、問題は NSString 側じゃなくて、C++ 側の std::string の
テンポラリオブジェクトの削除のタイミングだと思うんだけど。
const char* bar() { return foo().c_str(); }
っていう関数がダメだと思う。foo() でつくられた std::string は
関数抜ける時点で破壊されるのに、c_str() で取り出したポインタは
何をさしてるとおもうわけ?

#include <string>
#include <Foundation/Foundation.h>
std::string foo() { return "foo"; }
const char* bar() { return foo().c_str(); }
int main() {
NSAutoreleasePool *ap=[[NSAutoreleasePool alloc] init];
NSString* str = [NSString stringWithUTF8String:bar()];
NSString* rts = [NSString stringWithUTF8String:foo().c_str()];
NSLog(@"bar()=%s", bar());
NSLog(@"str=%@", str);
NSLog(@"rts=%@", rts);
[ap release];
}

にしてみると rts のほうはちゃんと表示されるよね。




190 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:54:42 ]
>>186
どうも。
元のメソッドが呼ばれる前にsetしないとキャッシュされちゃうのかな?

191 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 21:28:33 ]
>>188-189
戻り値のスタックが安全じゃないことが良くわかったので、違う方法に
切り替えます。ありがとうございました。

192 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 21:36:49 ]
>>191
いや、まだよくわかってないんじゃないかな ...

戻り値のスタック自体は安全なので、
[NSString stringFromUTF8string: foo().c_str()] は ok 。
191 さんがはまっていた
const char* const bar() { return foo().c_str(); }
の場合は、作られた foo() は、そもそも戻り値スタックに乗らないで、
戻り値スタックにのるのは foo() から c_str() で返ってきた
char* ポインタだけでしょ。
で、その乗っている char * ポインタの値自体は安全なんだけど、
char * ポインタが差している文字列の実体、おそらく
どこかで malloc されているもの、は bar() の関数から抜ける際に
foo() で出来たテンポラリが破壊されるのでついでに free されるわけです。


もういちど C++ のテンポラリオブジェクトの寿命について
勉強したほうがいいと思います。

193 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 22:35:05 ]
ObjC ってか C++ の話だよなぁ

194 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 02:11:32 ]
いつまでたっても[[[[]]]]に慣れない・・・困ったもんだ

195 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 03:20:49 ]
anObject.doSomething() を [anObject doSomething] に
展開するスクリプトを書いてコンパイルの前にかませば?


196 名前:デフォルトの名無しさん [2008/04/20(日) 00:04:52 ]
オーバーロードについて質問です。

unsigned intを返すvalueという名のメソッドをあるオブジェクトにつけているの
ですが、ワーニングで

warning: multiple declarations for method `value'
warning: using `-(NSString *)value'
warning: also found `-(unsigned int)value'
warning: comparison between pointer and integer

ときます。


Objective-Cで多重定義の問題をクリアする方法はありますでしょうか?

荻原本でいうと、p69-70の話題です。

197 名前:デフォルトの名無しさん [2008/04/20(日) 01:13:24 ]
「Objective-C Mac OS Xプログラミング 荻原 剛志」

↑これamazonとかで新品無いんだけど、絶版になったんですか?

198 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 03:43:30 ]
//id instance = [[AnObject alloc] init];
AnObject *instance = [[AnObject alloc] init];
[instance value];
とか
[(AnObject*)instance value];
とか、とりあえず明確に指定すればwarningは出なくなる…

199 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 11:55:47 ]
>>198
C++ では静的型付けをつかってオーバーロードするところを、
Objective-C ではメソッドの名前を長くして、
メソッド名を読んだだけで何をやっているかわかるようにするのが
Objective-C での作法です。
stringValue: とか intValue: とかいうふうに名前を付けて区別しましょう。
(NSControl とかはそうしてます。)

string / int とか型名をつけるだけでなくて、
返ってくる string が会社の名前、 unsigned int が値段なら
stringValue: のかわりに companyName:
intValue; のかわりに price:
とかしましょう。

value とかいう一般的すぎるメソッド名をつけると
えてしてそのしたにコメントを書くことになりますが、
メソッド名自体をコメントにしてしまえということです。



200 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 13:11:37 ]
>>198
id のままテストコード書いてました。なるほど。
ありがとうございます。

>>199
Objective-Cでの作法を教えていただきありがとうございます。
これから気をつけていきたいとおもいます。

201 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 13:28:39 ]
じつは、コードを書くときは常に

>メソッド名を読んだだけで何をやっているかわかるようにする

意識はもっているつもりだったのです。

valueもそれが一番適切な名前だと思ってつけたのですが、失敗でした。

Objective-Cは面白い言語だと思いますが、オーバーロード(演算子も含めて)
が弱いのが(私にとって)玉に瑕です。

valueという同一メッセージに、いろいろなオブジェクトがそれぞれの流儀で
反応してくれるのを期待してしまうのです。

たとえば、整数なのか小数なのかコード中で区別せず、
valueとすればいいだけ、とか。






[ 続きを読む ] / [ 携帯版 ]

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

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