11/08/21 10:47:48.04
Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
(Wikipedia:URLリンク(ja.wikipedia.org) より)
Objective-C [ObjC part:5];
スレリンク(tech板)
Objective-C [ObjC part:4];
スレリンク(tech板)
Objective-C [ObjC part:3];
スレリンク(tech板)
Objective-C
スレリンク(tech板)
Objective-C
URLリンク(pc5.2ch.net)
2:デフォルトの名無しさん
11/08/21 10:49:46.41
*** プログラム技術板 ***
【マック】Macintoshプログラミング質問箱
スレリンク(tech板)
*** 新・mac板 ***
Cocoaはさっぱり!!! version.16
スレリンク(mac板)
Macでプログラミング{10}
スレリンク(mac板)
iPod touch/iPhone ネイティブアプリ製作 ver.16
スレリンク(mac板)
3:デフォルトの名無しさん
11/08/21 10:51:19.50
*** 本家 ***
Objective-C 2.0 プログラミング言語
URLリンク(developer.apple.com)
Introduction to The Objective-C 2.0 Programming Language
URLリンク(developer.apple.com)
そのほか英語
URLリンク(developer.apple.com)
*** 書籍 ***
荻原本
URLリンク(amazon.jp)
HMDTダイナミック本
URLリンク(amazon.jp)
4:デフォルトの名無しさん
11/08/21 10:52:45.16
ダイナミック Objective-C サイト
URLリンク(journal.mycom.co.jp)
Apple のランタイムのソースコード (10.7)
URLリンク(www.opensource.apple.com)
英語のサイト
Objective-C 入門
URLリンク(cocoadevcentral.com)
Objective-C Style 1, 2 (変数名のつけかた等)
URLリンク(cocoadevcentral.com)
URLリンク(cocoadevcentral.com)
Mike Ash さん(Audio Hijack の中の人)のブログ、 Obj-C のランタイムの話が良く出る
URLリンク(mikeash.com)
C++ と Objective-C の文法の比較
URLリンク(ktd.club.fr)
5:デフォルトの名無しさん
11/08/21 23:54:46.01
民主党web-site URLリンク(www.dpj.or.jp)
民主党「生活が第一」チャンネル URLリンク(www.youtube.com)
6:デフォルトの名無しさん
11/08/23 02:40:17.98
*** 警句 ***
汝、retainCountを数える事なかれ
そは、理を知り真理に触れし者のみが振える御技
汝、オーナーシップの本質を見よ
そは、相反する一対の調和を守る事也
allocにはreleaseを。copyにはreleaseを。retainにはreleaseを。
アーメン
7:デフォルトの名無しさん
11/08/25 09:15:33.20
objcはgtagsできないわけ?
8:デフォルトの名無しさん
11/08/25 21:53:48.84
Objective-Cの言語的な面白さや美しさってどこですか?
9:デフォルトの名無しさん
11/08/26 07:12:02.43
age
10:デフォルトの名無しさん
11/08/28 20:51:58.43
円高なんとかしろよ、このヤロー!
11:デフォルトの名無しさん
11/08/29 08:10:15.25
うるせーバカヤロー!
12:デフォルトの名無しさん
11/08/30 21:28:11.38
SpeedMailerのこうなごさんのサイトがインドネシアのハッキンググループにハックされたままになってもう1週間以上。だれか教えてあげてw
URLリンク(kounago.jp)
13:デフォルトの名無しさん
11/08/31 23:53:03.55
>>3
それ古すぎ。こっちが最新。
*** 本家 ***
Objective-C 2.0 プログラミング言語
URLリンク(developer.apple.com)
14:デフォルトの名無しさん
11/08/31 23:55:35.51
これもObjCか?
Blocksプログラミングトピックス
URLリンク(developer.apple.com)
並列プログラミングガイド - GCDとか
URLリンク(developer.apple.com)
こっから
URLリンク(developer.apple.com)
15:デフォルトの名無しさん
11/09/02 00:43:49.51
すごいバグ発見したのだが。。。。
配列の要素の入れかえでNSMutableArrayのexchangeObjectAtIndex:withObjectAtIndex:って
メソッドが壊れていることに気づいた。
下のコード実行してみてほしい
NSMutableArray *dataSource = [[NSMutableArray alloc] init];
// 10個の要素を持つ配列を生成
for (int i = 0; i < 10; i++) {
[dataSource addObject:[NSString stringWithFormat:@"%d", i]];
}
// 変更前の配列の中見を確認する
NSLog(@"%@", dataSource);
// インデックス0の要素とインデックス2の要素を入れ替える
[dataSource exchangeObjectAtIndex:2 withObjectAtIndex:0];
// 変更後の配列の中見を確認する
NSLog(@"%@", dataSource);
16:デフォルトの名無しさん
11/09/02 00:47:13.81
>>15
2011-09-02 00:46:40.895 gomi1[12097:707] (
0,
1,
2,
3,
4,
5,
6,
7,
8,
9
)
2011-09-02 00:46:40.897 gomi1[12097:707] (
2,
1,
0,
3,
4,
5,
6,
7,
8,
9
)
17:デフォルトの名無しさん
11/09/02 00:49:43.53
2011-09-02 00:49:10.310 Test[9304:707] (
0,
1,
2,
3,
4,
5,
6,
7,
8,
9
)
2011-09-02 00:49:10.312 Test[9304:707] (
2,
1,
0,
3,
4,
5,
6,
7,
8,
9
)
で?
18:デフォルトの名無しさん
11/09/02 00:55:11.26
これは、どういうバグだ?
19:デフォルトの名無しさん
11/09/02 00:55:15.74
初心者は自分の頭がバグってるという好例
20:デフォルトの名無しさん
11/09/02 12:54:52.72
正常にみえるけど、どこがバグってるの?
21: 忍法帖【Lv=40,xxxPT】
11/09/02 13:01:06.37
>>20
>>19
22:デフォルトの名無しさん
11/09/02 23:52:32.55
NSOperationQueueをmainQueueで作った場合にcancelAllOperationsしても
中のNSOperationクラスが残ったままなのですが、これは何が原因でしょう??
// キュー作成
self.queue = [NSOperationQueue mainQueue];
// NSOperationのサブクラス作成
Operation *op = [[[Operation alloc] init] autorelease];
// エンキューする
[self.queue addOperation:op];
// キャンセルする
[self.queue cancelAllOperations];
// キューの中身を確認する(0ではなく1になる)
NSLog(@"%@", [[self.queue operations] count]);
23:デフォルトの名無しさん
11/09/03 00:17:48.34
キャンセルする前に実行されてしまったとか?
24:デフォルトの名無しさん
11/09/03 05:04:17.69
>>22
cancelAllOperationsは[op cancel]するだけじゃなかったっけ。
Operationが停止するまで待ちたいなら、
その後にwaitUntilAllOperationsAreFinishedを追加かな。
25:デフォルトの名無しさん
11/09/03 06:27:53.23
>>23
テスト的に10秒くらいかかる処理にしてるのでそれはないです。
>>24
むしろ[op cancel]してもらえればop側で処理を停止するように書いてあるので
cancelメッセージを送信してほしいんですが、調べてみると送っていませんでした。
これが原因だと思います。なぜ送信しないかは不明です。
ちなみにwaitUntilAllOperationsAreFinishedはopが実行完了するまでスレッドを
ブロックするメソッドのなので、やりたい事とちがいます。
ちなみにNSOperationQueueの初期化を下記のようにすると
きちんとキャンセルされます。
self.queue = [[[NSOperationQueue alloc] init] autorelease];
26:デフォルトの名無しさん
11/09/03 12:58:56.96
mainQueueはまさに実行中のメインスレッドのキューだから、エンキューしたとたんにすぐ実行されて
キャンセルが間に合わないんじゃないの?
別に作ったキューは、エンキューしてから実際に実行されるまで間があるだろうから、実行前にキャンセル
できたのでは?
ドキュメントでも、一旦実行されたオペレーションのキャンセルができるかどうかは、オペレーション側の
実装次第ってかいてあるし。
キューに残っているオペレーションのステータスを確認してみたら?
27:デフォルトの名無しさん
11/09/03 15:04:08.66
mainQueue は共有資源で、他でも使ってるかも知れないのに cancelAllOperations してもいいのかな?
あと、残った 1 は、まさに cancelAllOperations を実行中の operation かも。
•cancelAllOperations の前には operations の数はいくつあったか
•cancelAllOperations で自分の作った operation がいくつ cancel されたか
を確認すべきでは?
28:デフォルトの名無しさん
11/09/04 23:01:50.36
>>22
NSOperationQueueにCancelAllOpetationを送ってもQueueからは削除されずに、全てのOperationをCancel状態にするだけです。cancel状態の時はmainメソッドは呼ばれないのです。昔、10,000個近く突っ込んでえらい目にあった(笑)
29:デフォルトの名無しさん
11/09/05 00:24:59.80
>>28
mainQueueのときはそもそもcancelを呼ばない?から、ちょっと違う問題な気がする。
ユーザーの操作に応答しなくなるだろうから、mainQueueに突っ込むメリットがあまり無いと思うんだけど、
どういう時に使うんだろうか。
30:デフォルトの名無しさん
11/09/05 01:33:55.37
mainQueueって、RunLoopで処理されるキューでしょ?
cancelしたあと、一度RunLoopに戻ってみたら?
31:29
11/09/05 01:49:04.35
>>30
cancelが呼ばれず、オペレーションを終了できないので、
戻す方法がわかりません。
(個別にcancelを呼べば、終了できる)
32:デフォルトの名無しさん
11/09/05 09:43:03.83
オペレーションの実装に問題があるような気がする。実行中にCancelが呼ばれた時の処理がうまくできてないとか。
33:29
11/09/05 13:07:35.55
mainQueueのときはcancelAllOpetationではcancelが呼ばれない?ので、
呼ばれたときの処理の問題では無い気がします。
オーバーライドしてログ出力するようにしても、ログが表示されない。
allocした場合はログが表示される。
(個別にcancelを呼んで対処は可能)
- (void)cancel {
NSLog(@"%s", __func__);
[super cancel];
}
- (void)main {
NSLog(@"%s", __func__);
while (![self isCancelled]) {
sleep(1);
NSLog(@"sleep");
}
}
- (void)dealloc {
NSLog(@"%s", __func__);
[super dealloc];
}
34:デフォルトの名無しさん
11/09/05 13:52:39.74
いい加減ウザイからNSOperationのリファレンス見たけど
理由と思われるものがちゃんと書いてあるよ
長いから自分で読んでね!
Responding to the Cancel Command
って所もね
35:29
11/09/05 15:49:26.06
>>34
mainQueueだとcancelAllOpetationでcancelを呼ばないって
理由と思われるものは書いて無いんじゃないかな。
英語は得意じゃないんで、間違ってたら指摘よろしく。
自身のcancelメソッドを呼ぶか、キューのcancelAllOpetationを呼べと書いてあるように見える。
You do this by calling the cancel method of the operation object itself or by calling the cancelAllOperations method of the NSOperationQueue class.
36:デフォルトの名無しさん
11/09/05 16:54:38.17
cancelは、少なくともキュー内にそのオペレーションが確実に存在してて、
実行前か、実行中じゃないと呼ばれないと思うので、エンキューと、キャンセルの
タイミングが書かれてないと、なんともわからない。
cancelが呼ばれた時のキューの中身と、各オペレーションのステータスを表示
してみたらいいんじゃあるまいか。
もしかしたら、メインキューの場合、次のループまで実際の処理が遅延するとか
あるのかもしれない。まぁ結構適当に書いた。
37:デフォルトの名無しさん
11/09/05 18:41:03.85
1秒かかるオペレーションを10個ほど突っ込んで -cancelAllOpetation 呼んで見れば何か分かるんじゃないかな?
38:デフォルトの名無しさん
11/09/05 18:51:22.63
動作確認用のサンプルコードを書いて見た。
int main(int argc, char *argv[]) {
CFShow(@"*** START ***");
CFRunLoopPerformBlock(CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, ^() {
CFShow(@" begin Func1");
[[NSOperationQueue mainQueue] addOperationWithBlock:^() {
CFShow(@" begin Func2");
CFRunLoopStop(CFRunLoopGetCurrent());
CFShow(@" end Func2");
}];
[[NSOperationQueue mainQueue] cancelAllOperations];
CFShow(@" end Func1");
});
CFShow(@"RUN!!");
CFRunLoopRun();
CFShow(@"*** END ***");
return 0;
}
*** START ***
RUN!!
begin Func1
end Func1
begin Func2
end Func2
*** END ***
39:38
11/09/05 18:55:37.71
書き忘れてたけど、GCは必須ね
40:デフォルトの名無しさん
11/09/05 19:09:49.31
なにを動作確認しようとしているのか、さっぱりわからない。
キャンセルしようとした時にキューの中がどうなっているのかを確認しないと。
41:デフォルトの名無しさん
11/09/05 19:13:09.03
ようするに、cancelAllOperationsを呼んでもキャンセルされない、ということだ
42:デフォルトの名無しさん
11/09/05 19:27:25.24
Func2が実行されたのは、cancelが呼ばれた時点で、既に実行されてて間に合ってないからじゃないの。
だから、cancelを呼ぶ時点でのキューの中身とそれぞれのステータスを確認してみないと意味ないよ。
何回も指摘されてるけど、ドキュメントには、cancelは直ぐに効果を及ぼすとは限らないって書いてあるよね。
43:デフォルトの名無しさん
11/09/05 19:36:13.86
int main(int argc, char *argv[]) {
CFShow(@"*** START ***");
CFRunLoopPerformBlock(CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, ^() {
CFShow(@" begin Func1");
[[NSOperationQueue mainQueue] addOperationWithBlock:^() {
sleep(1);
CFShow(@" begin Func2");
CFRunLoopStop(CFRunLoopGetCurrent());
CFShow(@" end Func2");
}];
[[NSOperationQueue mainQueue] addOperationWithBlock:^() {
sleep(1);
CFShow(@" begin Func3");
CFRunLoopStop(CFRunLoopGetCurrent());
CFShow(@" end Func3");
}];
...続く
44:デフォルトの名無しさん
11/09/05 19:37:25.00
[[NSOperationQueue mainQueue] addOperationWithBlock:^() {
sleep(1);
CFShow(@" begin Func4");
CFRunLoopStop(CFRunLoopGetCurrent());
CFShow(@" end Func4");
}];
[[NSOperationQueue mainQueue] cancelAllOperations];
CFShow(@" end Func1");
});
CFShow(@"RUN!!");
CFRunLoopRun();
CFShow(@"*** END ***");
return 0;
}
45:デフォルトの名無しさん
11/09/05 19:43:47.19
すまん間違った。忘れてくれ。
46:デフォルトの名無しさん
11/09/05 19:52:47.76
>>42
> Func2が実行されたのは、cancelが呼ばれた時点で、既に実行されてて間に合ってないからじゃないの。
何を言っているのか、いまいち分からないのだが、
まず、君の言う「cancel」って-[NSOperation cancel]のこと?
それとも、-[NSOperationQueue cancelAllOperations]のこと?
47:デフォルトの名無しさん
11/09/05 20:10:40.64
>>42
さっきから、RunLoopの話が出ている訳だが、このコードがシングルスレッドで動いていることは、分かっているよね?
48:デフォルトの名無しさん
11/09/05 20:50:21.64
ちょっと試してみたが、>>38の言うとおり、メインキューでは、cancelAllOperationsはきかないみたいだな。
allocして作ったキューではきく。違いは何かというと、シリアルか非同期かいうことか。
説明がドキュメントにみあたらないげと、もうそういう仕様ということでいいんじゃね?
メインキューはUIも処理するから、本来時間のかかる処理をメインキューでやるべきではないし。
49:デフォルトの名無しさん
11/09/05 20:56:46.69
GCDで書いてシングルスレッド?あるのか。
>>37,42 説を推すが。
50:デフォルトの名無しさん
11/09/05 21:06:28.51
>>49
GCDじゃなくて、あくまでNSOperationだから。じゃないのか?
51:デフォルトの名無しさん
11/09/05 21:09:59.31
-[NSOperationQueue cancelAllOperations] に breakpoint 設定して、
アセンブリコードおっかけて見りゃわかるが、
mainQueue の時だけ「何もしない」処理になってる。
mainQueue は共有資源なんだからこれはこういう仕様なんだろう。
cancelAllOperations で意図しない operation が cancel されないように。
52:デフォルトの名無しさん
11/09/05 21:16:02.76
>>49
メインスレッドで実行することを指定しているのだから、逆にマルチスレッドにはなれないだろう。
53:デフォルトの名無しさん
11/09/05 21:19:52.56
>>51に同意
54:デフォルトの名無しさん
11/09/05 21:21:58.97
UIのイベント処理なんかもオペレーションが使われてんだっけ?
55:デフォルトの名無しさん
11/09/05 21:45:09.07
>>54
それは、NSEventな話?
56:デフォルトの名無しさん
11/09/05 22:28:31.74
いや、>>51で意図しない operation が cancel されないように。ってあったから、
意図しないオペレーションってどんなんかなと思って。
57:デフォルトの名無しさん
11/09/05 22:59:44.12
>>56
マルチスレッドな環境では、あるスレッドで実行されているNSOperationの内部で、mainQueueに新しいNSOperationを追加するかもしれない。
だから、ある時点でメイン・スレッドのRunLoopに、どんなNSOparationがスケジュールされているか把握するのは無理。
という意味だと思います。
たとえ、-[NSOparationQueue operations]を呼び出して中身を確認したつもりでも、次の瞬間に新しいNSOperationが増えているかもしれない。
58:デフォルトの名無しさん
11/09/05 23:05:07.32
あぁ、でもそれは、MainQueueにかぎらず、GlobalQueue全般についていえることだね。
59:29
11/09/05 23:25:27.70
>>36
下の様なコードで、cancelAllOperationsを呼ぶ前はisReadyがYESで、他がNO。
メインキューで処理してる場合、次のループが来た時にはcancelする対象が無くなってるような気がする。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.queue = [NSOperationQueue mainQueue];
Operation *op = [[[Operation alloc] init] autorelease];
[self.queue addOperation:op];
op = [[[Operation alloc] init] autorelease];
[self.queue addOperation:op];
NSArray *ops = [self.queue operations];
for (id op in ops) {
//[op cancel];//個別に呼べば、キャンセルできる。
NSLog(@"isCanceled:%d, isExecuting:%d, isFinished:%d, isConcurrent:%d, isReady:%d",
[op isCancelled], [op isExecuting], [op isFinished], [op isConcurrent], [op isReady]);
}
[self.queue cancelAllOperations];
NSLog(@"cancel");
>>42
実行前か実行中かでcancelが呼ばれたり、呼ばれなかったりするわけではないのでは?
ドキュメントに書いてあるのは、cancelがオペレーションを強制的に止めるわけでは無いことは書いてあるけど、
内部のフラグ更新するとも書いてある。
効果が出ないと書いてあるのは、(実行が?)終了してるものにcancelを送ってもキューに影響は無いと書いてあり、
実行中にcancelされた場合は、isCanceledを自分でチェックして、速やかにmainを終えるようにするのが望ましく、
実行前なら順番が回ってきた時にstartが呼ばれた後、
mainを呼ばずにキューから削除されるはず。(直ぐに効果を及ぼさないってのは、このキューに対してのことを指しているのでは?)
アセンブリを読めないから実装まではわからないけど、
>>51の言うようにそういう仕様なんだろうとは思う。
とはいえoperationsで簡単に回避できるので、個別に確認しろという意思表示なのかな。
60:デフォルトの名無しさん
11/09/06 00:02:38.21
そもそもmainQueueにぶちこんだoperationをまとめてcancelすることが必要になる設計がおかしい
61:デフォルトの名無しさん
11/09/06 00:11:17.56
まぁな
62:デフォルトの名無しさん
11/09/06 11:30:30.58
これで独立できる
売るものはスマートフォンアプリ WEBサイト運営
サーバーはクラウド VPS
電話はスマートフォンSkype
オフィスは地方にプレハブ型の格安高性能オフィスを建て(300万~500万)
レンタル自習室&シェアオフィスで収入を得ながらそこで開発する
URLリンク(tinyurl.com)
URLリンク(tinyurl.com)
63:デフォルトの名無しさん
11/09/21 15:08:49.54
スマン。基礎的なことを教えてください。
- (NSString *)getString { //①
NSString *msg = @"temp";
return msg;
}
これでも問題なしで、以下とやってることは同じ?
- (NSString *)getString { //②
NSString *msg = [[NSString alloc] initWithString:@"temp"];
return [msg autorelease];
}
returnすると、中括弧の範囲内で終わるはずのmsgの寿命が、呼び出し元のrun loopに依存するようになるんですよね?
②は問題ないと感覚的に分かるのですが、①はinitせずに一時オブジェクトをreturnしていることにいまでも違和感が。。
64:デフォルトの名無しさん
11/09/21 15:28:02.80
定数は一時オブジェクトではないので
65:デフォルトの名無しさん
11/09/21 15:30:50.19
char *hoge() { return "hoge";}
と一緒
66:63
11/09/21 16:13:55.92
>>64-65 サンクス
なるほど。
NSString以外でも、NSData *myDataとかでも同じですよね?
returnによって自動でつくautoreleaseのスコープが伸びるのであって、
一時オブジェクトという感覚を捨てたほうがいい感じでしょうか。
67:デフォルトの名無しさん
11/09/21 16:23:12.35
>>66
なにもかもが違う
68:デフォルトの名無しさん
11/09/21 16:34:53.61
何を聞かれてるのかわからないのに無理に答えなくていいです
69:デフォルトの名無しさん
11/09/21 16:47:27.28
へぇ
70:デフォルトの名無しさん
11/09/21 17:03:54.99
NSString *msg = @"temp";
って
NSString *msg = [[NSString alloc] initWithUTF8String:"temp"] autorelease];
または
NSString *msg = [NSString stringWithUTF8String:"temp"];
とほぼ同義だと思ってるんだが。@"~"ってNSString用のシンタックスシュガーだろ。
71:63
11/09/21 17:06:58.54
>>67
違うなら違うで、どのあたりか指摘いただけるとありがたいです。
>returnによって自動でつく
とは①の場合に、msgがautorelease扱いになることを指して書きました。
>autoreleaseのスコープが伸びる
とは、
{
NSString *string = [self getString];
}
のように呼び出し元の有効範囲でautoreleaseされるという意味で書きました。
ちなみにこの辺を参考にして、質問しました
URLリンク(stackoverflow.com)
72:デフォルトの名無しさん
11/09/21 17:12:05.35
return で autorelease が自動でつくなんて初耳だぞ。
returnは関係ないだろ。
73:デフォルトの名無しさん
11/09/21 17:15:50.44
>>71
autoreleaseっていうのは、あとでreleaseするために
AutoreleasePoolに突っ込むっていう操作だよ。
returnで自動で付いたりしないしスコープとも関係ない。
74:デフォルトの名無しさん
11/09/21 17:17:04.26
63 は任意のメソッドに自動で
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
{//スコープ(笑)
...
}.
[pool release]; が付いていて、return の際にはスコープが伸びる(謎)とか思ってるんじゃ無かろうか。
75:デフォルトの名無しさん
11/09/21 17:20:23.35
>>70
@"~" は CFSTR("~") と等価みたいだよ。
76:デフォルトの名無しさん
11/09/21 17:46:33.21
伸びるって表現するならスコープじゃなくてライフサイクルでしょ。
77:デフォルトの名無しさん
11/09/21 17:49:10.30
スコープに対してエクステントっていうんだぜ
78:デフォルトの名無しさん
11/09/21 17:52:15.33
>>75
そうなんだ。@"~"はautoreleaseされないんだな。勉強になった。
79:63
11/09/21 18:04:59.00
自分が考え違いをしていたのだけなんとなく分かってきました。
>>72-73
>returnで自動で付いたりしないしスコープとも関係ない。
はい。
>>74
>return の際にはスコープが伸びる(謎)とか思ってるんじゃ無かろうか。
似たようなことを思ってました。
まだ分かってないんですけど、下の①②は両方とも問題なく使えますか?
- (id)getData { //①
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"URLリンク(hoge)"]];
return data;
}
- (id)getData { //②
NSData *data = [[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"URLリンク(hoge)"]] autorelease];
return data;
}
呼び出すときの有効範囲は中括弧内ですよね?
{
NSData *data = [self getData];
}
80:デフォルトの名無しさん
11/09/21 18:15:40.59
何を聞きたいのかがよく分らんな。
まず、スタックとヒープの違い、オブジェクトのオーナーシップ、
メインループとAutoreleasePoolの関係を理解しれ。
81:デフォルトの名無しさん
11/09/21 18:21:32.31
>>79
①と②は等価。
①は予めautoreleaseされたオブジェクトをdataに受け取ってる。
②は自分で生成してautoreleaseしてる。
getDataが返したオブジェクトの有効範囲という意味なら中括弧は無関係。
どこかで現在のAutoreleasePoolが開放されるまでは生きてる。
たぶんフレームワークに制御を戻すまで。
82:デフォルトの名無しさん
11/09/21 18:34:32.76
>>79
AppKit とかが AutoreleasePool 作ってるのを、
言語レベルで勝手に AutoreleasePool で括られてると勘違いしてるようだが、それは違う。
83:デフォルトの名無しさん
11/09/21 18:36:41.67
変数のスコープと、オブジェクトのライフサイクルがごっちゃになってる気がするな。
{
NSData *data = [self getData];
}
は、dataという変数のスコープは中括弧内に限定される(中括弧の外で参照しようとしても、
コンパイルが通らない)が、[self getData]から返された実体が実際に破棄されるのは、
次のループのサイクルに戻ってAutoreleasePoolが中身を破棄する時でしょ。
autoreleaseした時点で、AutoreleasePoolに登録されている。
基本的にスコープとオブジェクトのライフサイクルは関係ない。スコープを抜けるときに
自動的にreleaseされることもない。
C++でローカルで宣言したオブジェクトがスコープを抜ける時に呼ばれるデストラクタと
ごっちゃになってないか。どっちかっつうと、allocとreleaseの関係は、C++のnewとdelete
に近い。でもC++のオブジェクトは参照カウンタによる管理ではないけど。最近のC++は
よく知らないが。
84:デフォルトの名無しさん
11/09/21 18:57:58.40
じゃあ、混乱させよう
今のMac OS Xでの実装では
- (NSString *)hoge { return @"hoge";}
- (NSString *)fuga { return [NSString stringWithString:@"hoge"];}
で返されるものは同じインスタンス。
85:63
11/09/21 18:59:36.65
みなさんの説明で、ようやく理解できてきたと思います。
スタックありきで考えていました。すんません。自分がスタックと考えていたもの全てヒープなんですね。
>>79の①がひっかかっていた理由が、
スタックに制限されると誤解していたので、スコープで理屈がつくよう自分理論を作ってました。
ありがとうございました。いやマジで。
86:デフォルトの名無しさん
11/09/21 19:08:19.77
>>84
つまり、クラスクラスタの為せる技ってこと?
87:デフォルトの名無しさん
11/09/21 19:12:17.38
>>86
+ (NSString*) stringWithString:(NSString*)s { return s; }
っていう実装になってる事に加えて、
コンパイラが同じ内容の文字列定数をひとつにまとめるようになってる
っていう事では?
88:デフォルトの名無しさん
11/09/21 19:13:31.64
いやこんな風かな?
+ (NSString*) stringWithString:(NSString*)s { return [s autorelease]; }
89:デフォルトの名無しさん
11/09/21 19:14:15.10
あれなんか違いそう
90:デフォルトの名無しさん
11/09/21 19:23:04.13
NSString *s1 = @"hoge";
NSString *s2 = [NSString stringWithString:@"hoge"];
NSString *s3 = [NSMutableString stringWithString:@"hgoe"];
NSString *s4 = [NSString stringWithString:s3];
NSString *s5 = [NSString stringWithString:s4];
NSLog(@"%p, %p, %p, %p, %p", s1, s2, s3, s4, s5);
0x100002058, 0x100002058, 0x10054f3f0, 0x10054f450, 0x10054f450
91:デフォルトの名無しさん
11/09/21 19:26:09.97
へー [NSString stringWithString:@"hoge"] も
autorelease されないんだな。
他の[NSString stringWith~]はautoreleaseされるのに。
奥が深いというか、変態的というか。 黒魔術の一端を垣間見た気がした。
92:デフォルトの名無しさん
11/09/21 19:26:58.44
されないってなんだよ。release に意味がないだけ
93:デフォルトの名無しさん
11/09/21 19:31:02.89
あぁ定数だから、関係ないのか。
94:デフォルトの名無しさん
11/09/21 19:34:28.55
定数はとにかく使いまわされるっていう事だな。
95:デフォルトの名無しさん
11/09/21 19:34:57.14
つうことはあれか、ソース内に@"~"の記述が増えれば増えるほど
それが一時的な用途であったにせよ、メモリを圧迫するってことか。
96:デフォルトの名無しさん
11/09/21 19:38:22.24
でもリードオンリのページに置かれてプロセス間で共有されるだろうから、
同時にいくつも起動するプログラムなら節約になりそう。
97:デフォルトの名無しさん
11/09/21 19:45:58.05
>>95
> 容量の初期値は 2500。
URLリンク(hmdt.jp)
98:デフォルトの名無しさん
11/09/21 19:46:23.30
それは文字列の内容が同じ場合でそ
99:デフォルトの名無しさん
11/09/21 19:48:34.78
>>97
あぁつうことは、多少@"~"が多かろうが少なかろうが、
その領域の容量は予め決まっているから、メモリ的には
あまり関係ないっつうことか。
100:デフォルトの名無しさん
11/09/21 19:50:47.24
文字列定数をまとめるのって実行時にやってたのかよ・・・
101:デフォルトの名無しさん
11/09/21 19:53:58.47
NSString *str0 = @"hoge";
NSString *str1 = [NSString stringWithString:str0];
NSString *str2 = [str0 copy];
fprintf(stderr, "%p, %p, %p¥n", str0, str1, str2);
全部同じインスタンス
コピーすらされない。節約魂入ってます。
@property (copy) NSString *hoge;
にイミュータブルなNSString文字列をsetするとまるで、
@property (retain) NSString *hoge;
のように振る舞うのもこれのおかげ。
102:デフォルトの名無しさん
11/09/21 20:04:24.45
なるほど、NSString の中身は変更されようがないから、コピーを作る必要がないってことか。
103:デフォルトの名無しさん
11/09/22 02:47:19.46
Constant CFString(=NSString)はかなり前からコンパイル時にgccがCFStringの構造を
直接展開する様になった。アセンブリリストで生成コードを見れば一目瞭然。
Constant CFStringに対してretainやreleaseはNOP扱いで何の効果も無い。
>>65
これが一番適切な答えだね。
>>97
これは化石情報
104:デフォルトの名無しさん
11/09/22 05:16:10.18
質問させてくらはい
x = [[Foo alloc] init];
で init がエラーしたら、この alloc した領域はリークすると思うんですけどどうなんでしょう。
105:デフォルトの名無しさん
11/09/22 08:20:31.11
「init がエラーしたら」ってなんだよ
106:デフォルトの名無しさん
11/09/22 09:42:17.72
>>104
initが責任を負う
107:デフォルトの名無しさん
11/09/22 11:59:58.89
つまり辞任?
108:デフォルトの名無しさん
11/09/22 12:16:02.29
>>104
>>13にサンプル付きで載ってる。
109:デフォルトの名無しさん
11/09/22 16:42:25.26
>>106,108
ありがとん
110:デフォルトの名無しさん
11/09/24 12:10:30.79
正規表現リテラルとか欲しいな
@/hoge/ みたいな
111:デフォルトの名無しさん
11/09/24 20:00:20.06
>>110
@interface NSString (regex)
@property(readonly) NSRegularExpression* r;
@end
@implementation NSString (regex)
- (NSRegularExpression*)r {
return [NSRegularExpression regularExpressionWithPattern:self options:0 error:nil];
}
@end
regex = @"hoge".r;
obj-cなら、この辺りが限界かな
112:デフォルトの名無しさん
11/09/25 02:54:03.01
通信を途中でキャンセルするのは、下のどの組み合わせが必要ですか?
1.同期通信
2.同期通信+GCD
3.非同期通信
4.非同期通信+GCD
1だとGUIが止まって4だと行けるのは何となく。2と3の制限がイマイチ分かりません。
113:デフォルトの名無しさん
11/09/25 13:38:56.52
>>112
試してみて上手くいくのを採用。
114:デフォルトの名無しさん
11/09/25 18:47:20.02
事故解決しました。
115:デフォルトの名無しさん
11/09/25 23:40:46.43
まあ総当たりだと事故るよな
116:デフォルトの名無しさん
11/09/26 06:14:49.09
>>112
4.非同期にしてGCDしないと受信待ちから抜けられないでアンサー?
117:デフォルトの名無しさん
11/09/26 12:09:55.61
ライフラインお願いします。
118:デフォルトの名無しさん
11/10/03 00:46:55.39
ゲーム開発には明らかに不向きだと思うんだけど、
ocj-cを採用した商用の3Dバリバリなアクションゲームとかあったりするの?
nextstepから随分と長いこと使われてるあたり保守性に優れてそうだし、
長期スパンで使い続ける趣味グラマには良さげなんだけれども
119:デフォルトの名無しさん
11/10/03 01:50:21.96
>>118
一言でゲームといっても実際にはいろいろな種類のゲームがあるよね。
Objective-Cでの開発で不利にならないゲームのジャンルなり何なりがあるんじゃないかなあと思ったり。
120:デフォルトの名無しさん
11/10/03 01:56:38.30
3DバリバリなやつなんてOpenGLなんだから、
OS側のフレームワークとのインターフェイス以外は全部CなりC++なりで書けるじゃん。
121:デフォルトの名無しさん
11/10/03 02:43:31.46
>>119
quakeとか、doomとかをイメージしてまふ>3Dバリバリなアクションゲーム
画像処理系のプロプライエタリィなものは割とある気がするので、そういうのには向いてるのかと
>>120
そりゃま、そうなんだが
obj-cの特性を十分に使って開発されたソフトウェアの実績あるのかが気になったので
122:デフォルトの名無しさん
11/10/03 03:44:49.01
決して言い過ぎではないと思うから言うけど、
>>121
>obj-cの特性を十分に使って開発されたソフトウェアの実績あるのか
んなモンは無い
123:デフォルトの名無しさん
11/10/03 08:37:40.11
Appleの製品じゃね?
124:デフォルトの名無しさん
11/10/03 22:25:12.07
>>121
そのObjective-Cの特性って、例えばどんなのを想定してるの?
125:デフォルトの名無しさん
11/10/03 22:45:52.61
>>124
c++よりも動的な性質を持ったオブジェクト指向とか
特徴的といえば、(id)とかだけど、こういった独特の仕組みつかうことで開発効率あがったりするのかなと
obj-c自体にはあんまり関係なさそうだけどgcdとか
126:デフォルトの名無しさん
11/10/03 23:05:55.03
idが特徴的って…あんま理解してなさそうだな。
127:デフォルトの名無しさん
11/10/03 23:20:20.86
ああ、まったく理解してないぜ。ただの計算機歴史のミーハーだし
ネット上をいくら見回したって、smalltalk由来のオブジェクト指向以上の情報が見当たらのだもん
appleのプログラマが、ひょっこりとこのスレ見てるなんて奇跡でもおこらないかな
128:デフォルトの名無しさん
11/10/03 23:35:50.85
世界初のWebブラウザーとWebObjectsをじっくり調べてごらん。
129:デフォルトの名無しさん
11/10/03 23:43:34.57
Webブラウザの話は知ってるよ。知ってるわよ、そのぐらい。馬鹿にしないでくれる?っと。
奇遇にもちょうどWebObjectの記事を見ていたところw
javaで書き直されてるのね。不遇な子ですこと>obj-c
130:デフォルトの名無しさん
11/10/03 23:53:05.53
>>125
それで、「動的」だと、なぜ開発効率のアップに繋がるんだ?
131:デフォルトの名無しさん
11/10/03 23:56:53.60
その話題に持っていきたいなら隔離スレで頼む
煽りでなく、有益な流れになった試しがないw
132:デフォルトの名無しさん
11/10/04 00:02:33.36
仕様の固まっていない未知のソフトウェアを書く上では型指定されていない方が作りやすかった
当時のレガシーなc++の型システムでは、プログラムの修正がほぼ不可能だったのだと妄想中
単にcとobjective-cしかなかったような気もするが。
でも、あの時代ってSTLもないよね?そんな理由でNSArrayとかが使いやすかったんじゃないの
133:デフォルトの名無しさん
11/10/04 00:03:46.88
>>131
スレ違いスマソ
134:デフォルトの名無しさん
11/10/04 00:06:24.63
>>131
あまり、その話題に持って行くつもりもなかったのだが、
でも、今回の話って、結局そういうレベルの話なのだろう。
135:デフォルトの名無しさん
11/10/04 00:31:42.43
まああそこに落ち着いちゃうのかも知れないけど、落ち着いた先は泥沼なのよね
136:デフォルトの名無しさん
11/10/04 12:48:26.16
Objective-CのObjective-はCの敷居を限り無く下げただけだからCと同じようなもんだと思えばよろし
実際コアな部分は殆どCで書かれてる
137:デフォルトの名無しさん
11/10/04 12:59:57.47
>>132
まさにその罠にはまったのがAPIをC++でやったBeOSだったと記憶してる
138:デフォルトの名無しさん
11/10/04 19:56:59.56
delegateパターンはid型が便利。
OBJ-Cのメリットは、ちゃんと書くとコメントがいらないことだと思う。
139:デフォルトの名無しさん
11/10/06 01:32:05.58
cとc++ => 完全に別物
cobj-c => マクロのっけただけ
って認識であってる?
140:デフォルトの名無しさん
11/10/06 08:50:24.55
だいたい合ってナイ
141:デフォルトの名無しさん
11/10/06 12:27:26.18
極端な例えをする人は「そういうことにしたいんだろうな」としか思えん。
違うと言って「じゃあどう違うの?」「結局マクロみたいなものでやってるってことでしょ?」とか言いそうだし。
142:デフォルトの名無しさん
11/10/06 12:46:57.04
いいえ、事実です。
143:デフォルトの名無しさん
11/10/06 12:51:04.02
まあでもobjcはランタイムの方が本体で、
C言語に対する拡張はそれを便利に使えるようにするマクロ集的なところはあると思う。
C→C++とくらべると、なじんでないと言うか、異質感丸出しというか。ESQL/Cっぽい。
144:デフォルトの名無しさん
11/10/06 13:12:44.40
C++もObjective-Cも
最初の実装はプリプロセッサだったからマクロっぽく見えるんじゃね?
145:デフォルトの名無しさん
11/10/07 15:16:04.88
╭━━╮┏┓┏━━╮┈┈┈◤┈┈
┃╭━╮┃┃┃┃╭━╮┃┈◢◣◢◣┈
┃╰━╯╯┃┃┃╰━╯┃┈▉▉▉▋┈
┃╭━╮╮┃┃┃┏━╯┈◥▉▉◤┈
┗┛┈┗┛┗┛┗┛Ⓢⓣⓔⓥⓔ_Ⓙⓞⓑⓢ
╭━━━━━━╮
┃▉▉▉▉▉▉▉▉▉▉▉▉┃
┃▉┏━━━━┓▉┃
┃▉┃ⓉⓗⓐⓝⓚⓎⓞⓤ┃▉┃
┃▉┗━━━━┛▉┃
┃▉▉▉▉▉▉▉▉▉▉▉▉┃
╰━━┳━┳━━╯
▁▁▁▁╭╯▁▁╰╮▁▁▁▁
╱▔▔▔▔▔▔▔▔▔╲ ╭╮
▔▔▔▔▔▔▔▔▔▔▔ ╰╯
ずれるかな?
146:デフォルトの名無しさん
11/10/08 00:33:46.34
ずれるかなじゃねーよ、ずれまくってるじゃねーか!
納品する前にちゃんとテストしろよ、ボケが!
あと、コピペできねーぞ。どうなってんだ!
147:デフォルトの名無しさん
11/10/08 01:00:29.11
そういえば、Jobsが目をつけなかったらobjcは今頃博物館行きだったかもなあ。
148:デフォルトの名無しさん
11/10/08 12:13:33.90
iPhoneアプリで棒グラフを表示したいのですが、やり方が分かりません。
s7graphviewを使ってみましたが、イメージしているものと違っていて別のものを捜しています。
core-plot試しましたが、バイナリリンクの仕方が分からず挫折orz
(そもそもcore-plotでできるのか?)
JavaのJFreeChartの棒グラフのように表示できるものを捜しています。
Mac+Xcode4.1触り始めて一週間の素人です。
ご存知の方いたら教えてください。よろしくお願いします。
149:デフォルトの名無しさん
11/10/08 12:28:54.36
>>147
そしてiPhoneデベロッパーたちはDylanを使っているのだな。
150:デフォルトの名無しさん
11/10/08 12:44:26.10
NewtonScriptかも?
151:デフォルトの名無しさん
11/10/08 13:26:00.28
>>146
ずれてないじゃん。
152:デフォルトの名無しさん
11/10/08 15:11:12.45
>>151
メガネ変えろよ
153:デフォルトの名無しさん
11/10/08 15:20:59.41
ズレてねーよ
URLリンク(gazo.restspace.jp)
AA用のフォントも持ってないのなら死ねよ
154:デフォルトの名無しさん
11/10/08 15:37:35.32
AA用のフォントとか知るかよ。WindowsのIEで検証しろよ。
155:デフォルトの名無しさん
11/10/08 15:43:36.72
このスレでWinIE前提を唱えるとはかなりのツワモノだなw
156:デフォルトの名無しさん
11/10/08 15:48:46.72
AAってそもそもそういうもんだろ
〓 ウィキペディアより 〓
プロポーショナルフォントのアスキーアート
Internet Explorer5.0での表示を基準としたMS Pゴシック16ピクセル(12ポイント)、行間2ドットを標準として作られている。
数行?十数行であることが多いが、巨大なものでは50行に達する場合もある。
157:デフォルトの名無しさん
11/10/08 15:52:45.78
そもそも>>154にはこれもズレて見えるからどうしようもない。
___________________________________
| /;;:: \ニ..|' | |: /; イЖフ|:/:::,r'::,r''| ,!゙ -'' |
|, ,/,: -;;;;;;;;;;;;;;;;;;;;;: | | |; :;;: : : 〈;;::丶ニフ |::,、/:,,===、 .,===,. |
|,i_, -ー──ァ|==、、_ ,__,,,,..、、|=ェ;、 ,,,,,, ,,,,,, | :;;:/ , 、 |/ / .r;;;;;ヾ_r;;;; 、 .|
|t'i-、_,},}ノ ,,,:-;;彡-|_ィェァ了 (ェoヮ_ |ェヮ :) f' _-ェェ‐|,,ノ 〉 |::/ ̄ヾ;;;;ノ l,ヾ;;;ノ, |
|. r;;/,;;;;;;^'''ィ_。 ュ、 | ´!| |!` | ´.::;i, i. `'' ̄|爪 ヽ ;| ゞ / |
|i'"~ ''''':;;、,,  ̄ . | /u__,ゝ | ,イ;:' l |ノ 丶ヘ_冫ノ ,|. `トェェェェィ ./ |
|.'ー─^ー'_ ;; .| / _二' _、〉.. |/゙'''=-='''´ ヽ,...| | | ヽ |、 . \二二/./ .|
|'ニニニニヽ_彡、,,| ´  ̄ ` |'~===' '==='' .|.._,:ν⌒Y⌒ヽ、 ..::| 'ヽ  ̄ /ー- |
|___ /.::|゙ヽゝ、 , ノ | `::=====::" |.Kェエエェエェ-冫::::| \___/,: .:::|
|;;''''''''''''':;丶_/,,::::|;;;;; ヽー --''" , | .,i, |,. ヽ、___, ノ | ゙''''- 、、 '、_ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
158:デフォルトの名無しさん
11/10/08 15:54:18.05
>>153
ヒラギノじゃんw
なにがAAフォントだ 捏造すんなw
159:デフォルトの名無しさん
11/10/08 15:56:32.69
いーや、>>157はズレてないよ。
160:デフォルトの名無しさん
11/10/08 15:56:39.68
>>158
バーカ
161:デフォルトの名無しさん
11/10/08 16:08:32.58
>>149
それはそれで面白かったかもね。
動的な言語好きだわ。
162:デフォルトの名無しさん
11/10/09 18:00:09.02
>>145 >>157
Windows7 IE9 をインストールした直後だけど、ずれてる
163:デフォルトの名無しさん
11/10/09 23:29:22.53
メイリオ(笑)だとズレるんかもね
164:デフォルトの名無しさん
11/10/13 18:29:15.24
なんなんだこのヘンタイ構文は
これをエレガントとか言ってる奴は頭腐ってる
165:デフォルトの名無しさん
11/10/13 18:51:31.07
>>164
そんなことより聞いてくれよ
いま屁こいたら身が出たんだが
166:デフォルトの名無しさん
11/10/13 21:05:08.94
で?
167:デフォルトの名無しさん
11/10/13 22:16:03.40
エレガントって言ってる奴いるのかな
v1の二つの言語がしれっと同居してる様は面白いなとは思ったけどw
168:デフォルトの名無しさん
11/10/13 23:08:09.13
しかし、Objective-Cってほんと、エレガントだよなぁ。
169:デフォルトの名無しさん
11/10/13 23:10:09.02
Smalltalk知ってればそれほど違和感無いでしょ。
Objective-C++でSTLとAppKit混ぜたり、SSE使うのにintrinsic functionも
使うから、メッセージ構文如き何でもない。
170:デフォルトの名無しさん
11/10/13 23:28:39.41
懐が広いというのかなんなのか
まあ変態言語なのは間違いないんじゃね
171:デフォルトの名無しさん
11/10/14 01:16:42.13
NeXTとその後継のMacでしかまともに採用されなかった時点で
世のCプログラマがどのように見てたかわかるというもの
172:デフォルトの名無しさん
11/10/14 01:31:00.61
まあ当時はこれしかなかったっていう感じなんだろうな。
173:デフォルトの名無しさん
11/10/14 05:22:50.93
C++は汚いからな
Objective Cは動的な所が敬遠されたんだよな
今では逆に利点だけどさ
もっと早くにgc導入すべきだったよな
174:デフォルトの名無しさん
11/10/14 10:41:50.14
Objective-CのGCってJavaや.NETみたいに透過的に使用できるのか?
175:デフォルトの名無しさん
11/10/14 11:27:24.51
できないと思っていい
176:デフォルトの名無しさん
11/10/14 12:01:58.42
>>174
Collectorが関知するのはObjective-CとCoreFoundationのobjectだけ。
AppleはコンパイラによるAutomatic Reference Countingを主力に考えているから、
GCは既に廃止方向
177:デフォルトの名無しさん
11/10/14 12:02:17.00
>>174
ARCはGCじゃないよ
178:デフォルトの名無しさん
11/10/14 12:04:27.24
GCはもう廃止方向なんだ。短い寿命だったな。
179:デフォルトの名無しさん
11/10/14 12:40:22.42
Objective-Cを拡張していくよりまったく新しい言語考えたほうがいいと思うけどな
まあAppleに任せると謎センスでObjective-C以上にわけのわからない言語に仕上がりそうだけどw
180:デフォルトの名無しさん
11/10/14 12:45:54.01
Dylanがあるじゃないw
181:デフォルトの名無しさん
11/10/14 12:47:51.10
Dylanなんてアップル自身もさじを投げた糞言語だろw
182:デフォルトの名無しさん
11/10/14 12:53:58.48
早すぎただけだよ。今なら逝ける。
183:デフォルトの名無しさん
11/10/14 12:55:43.97
訃報: C 言語の開発者、デニス・リッチー氏が死去
URLリンク(developers.slashdot.jp)
Google+ で Rob Pike 氏が語ったところによると、C 言語の開発者、K&R の R であるところの Dennis Ritchie 博士が亡くなられた。
70 歳 (Rob Pike 氏による Google+ への投稿) 。
長らく闘病中だったとのことで、先週末に自宅で息を引き取ったそうだ。
184:デフォルトの名無しさん
11/10/14 13:00:53.38
Dylanもヘンタイだから広まらないだろうな
せめてC言語やってればすぐにマスターできますくらいのものでないと辛い
185:デフォルトの名無しさん
11/10/14 13:04:50.23
また一人、業界の大御所が世を去ったか…
黙祷
186:デフォルトの名無しさん
11/10/14 13:41:29.15
言語だけ良くてもライブラリがしっかりしてなければ広まらないよ
187:デフォルトの名無しさん
11/10/14 13:43:05.30
ブロック構文便利だけど、Objective-Cと混ざるとますますキモチワルイ。インデント的に。
188:デフォルトの名無しさん
11/10/14 13:48:05.65
C#と.NET Frameworkは偉大
189:デフォルトの名無しさん
11/10/14 13:51:36.54
>>183
ある意味ジョブズより偉大
190:デフォルトの名無しさん
11/10/14 14:00:34.30
デニス・リッチーなんて一般的には過去の人扱いだしな
191:デフォルトの名無しさん
11/10/14 14:11:33.10
どっちかといえばカーニハンの方に影響を受けてる気がする。
192:デフォルトの名無しさん
11/10/14 14:12:46.41
go はどうなるんだろ
193:デフォルトの名無しさん
11/10/14 20:47:34.00
Smalltalkライクの記述方法をCライクに変更するだけでだいぶ見やすくなると思う
194:デフォルトの名無しさん
11/10/14 22:10:51.40
記述方法はpascalライクにした方がコンパイル速いんじゃないの?
195:デフォルトの名無しさん
11/10/15 01:04:15.93
なんで?
196:デフォルトの名無しさん
11/10/15 02:17:40.99
シンタックスカラーリングが当たり前のご時世に
そんな所で速度稼ごうとか思わんだろ
素直に分散コンパイル環境にする
197:デフォルトの名無しさん
11/10/15 02:39:09.71
言語のせいじゃないだろ。ジョブズがC++選択してもMFCみたいなうんこにはならなかっただろうな。
198:デフォルトの名無しさん
11/10/15 02:43:32.67
まあ当時C++は選択しようがないけどな。
199:デフォルトの名無しさん
11/10/15 02:55:28.07
>>197
KT7の頃のMacAppやCWの方が現在のMFCより何倍もマシだからな
つかMFCって進化してるのか?
200:デフォルトの名無しさん
11/10/15 03:01:14.01
文字列とかコンテナ類がテンプレートベースになってATLと共用になったくらいじゃない?
201:デフォルトの名無しさん
11/10/15 05:47:31.35
やっぱMFCは進化の袋小路か
ObjCも色々変わって大変だけど
進化しないよりはマシだよな
202:デフォルトの名無しさん
11/10/15 05:52:01.90
>>193
ならないよ。
URLリンク(www.macruby.org)
MacRubyはlabeled parameter使えるからまだ良いけど、
># RubyCocoa code
>NSFileManager.defaultManager.createFileAtPath_contents_attributes(p, c, a)
これは最悪だろ。
203:デフォルトの名無しさん
11/10/15 06:07:54.14
ST風はわかりやすいと思うけど
@なんちゃらはわかりにくいな
204:デフォルトの名無しさん
11/10/15 16:38:16.99
>>202
正直そっちのほうが見やすい
205:デフォルトの名無しさん
11/10/15 16:40:59.65
普通にtabでインデントできる方が色々とありがたい。
206:デフォルトの名無しさん
11/10/15 16:44:20.26
>>202
>>NSFileManager.defaultManager.createFileAtPath_contents_attributes(p, c, a)
これは嫌だw今のでいいよ
207:デフォルトの名無しさん
11/10/17 12:59:47.44
性格の異なる複数の言語の構文が同居してる時点で気持ち悪い
流行らなかった理由はそこにあるんだろうね
208:デフォルトの名無しさん
11/10/17 13:53:11.79
それぞれの言語がもつ膨大な資産をほとんどシームレスに使用できるなんて、
素晴らしいじゃないか。それに比べたら見た目の気持ち悪さなど些細なことだ。
209:デフォルトの名無しさん
11/10/17 14:06:18.45
さすがにそれは苦しいw
210:デフォルトの名無しさん
11/10/17 16:10:52.20
まあ俺が知る言語の中じゃヘンタイ度はピカイチ
でもそれがカッコいい
211:デフォルトの名無しさん
11/10/17 16:25:21.65
えー、Pythonよりもー?
ヘンタイなのー?
212:デフォルトの名無しさん
11/10/17 17:22:49.35
Pythonはインデント以外には変態要素ない気がするが
213:デフォルトの名無しさん
11/10/17 18:20:55.35
__class__
214:デフォルトの名無しさん
11/10/17 18:25:04.34
もともとSmalltalk自体ヘンタイだからなw
215:デフォルトの名無しさん
11/10/17 20:18:52.79
そりゃタイヘンだ
216:デフォルトの名無しさん
11/10/17 22:33:03.57
変体を重ねて美しくなるのさ
217:デフォルトの名無しさん
11/10/18 03:05:35.65
メソッドを、いちいち [ ] で囲むのは、最初は面倒だと思ったけど、
だんだん人のソースを読むようになったら、
・[xxx yyy] だとメソッド
・xxx.yyy だとプロパティ
で、これは意外と見やすい(わかりやすい)かな、と思うようになった。
218:デフォルトの名無しさん
11/10/18 08:56:39.84
[ ]はともかく、ラベル付き引数のおかげで読みやすさは一番だと思う
219:デフォルトの名無しさん
11/10/18 10:14:55.75
Objective-C++でC++のクラスは扱えるけどC++でObjective-Cのクラスは扱えないのが辛い
だから基本的にクラスはC++で書いてる
正確にはCでも使えるようにCで書いたソースをC++のクラスでラップしてる
Objective-Cのクラスを扱うのはMacのAPIを利用する時だけ
220:デフォルトの名無しさん
11/10/18 12:29:31.26
そんなことしたら、NSArrayやNSDictionaryで使えないじゃん
221:デフォルトの名無しさん
11/10/18 14:23:26.94
自分で書いたコードをマック以外の環境でも必要とされるっての?
ちょっと羨ましいかもw
222:デフォルトの名無しさん
11/10/18 14:29:16.65
OpenGL使ったゲーム系はAndroidでも共有できるしね。
223:デフォルトの名無しさん
11/10/18 14:30:33.13
普通はコアな部分は極力プラットフォームに依存しないようにするな。
224:デフォルトの名無しさん
11/10/18 14:43:30.73
頓智.com の人が言っていたけど、セカイカメラはほとんど C で書いたので、
iphoneアプリから Android に移植するときに、すごく楽だったといっていた
(Objective-C への依存を極力なくした)
225:デフォルトの名無しさん
11/10/18 15:19:15.64
環境に依存する必要のない部分で依存させるようなコードを書く奴はど素人だけでしょ
226:デフォルトの名無しさん
11/10/18 15:22:48.66
GPSとか、加速度センサとか、UI回りとか、Objective-Cに依存しなけりゃならん部分は結構あると思うんだが。
227:デフォルトの名無しさん
11/10/18 16:00:47.14
APIを組み合わせるだけのアプリ開発してるならそうかも
228:デフォルトの名無しさん
11/10/18 16:24:14.30
フルスクラッチで全部手作りかよ
229:デフォルトの名無しさん
11/10/18 16:33:39.44
Cだって依存する環境だけどな・・・
230:デフォルトの名無しさん
11/10/18 16:53:33.98
環境に依存する必要のない部分で依存させるようなコード
って例えばどういうコードなんだ?
231:デフォルトの名無しさん
11/10/18 16:58:01.72
俺は独自の組込用RDBMSはCで書いてる
WinのアプリもMacのアプリも同じものを使ってる
232:デフォルトの名無しさん
11/10/18 17:01:51.58
>>230
ありがちなのは、MVCのMの部分とか。
233:デフォルトの名無しさん
11/10/18 17:12:31.14
例えば?って聞いてるのに、抽象的な回答する奴にはイラっとする。
234:デフォルトの名無しさん
11/10/18 17:15:00.31
>>231
ディスクI/O部分は、POSIX使ってるの?
235:デフォルトの名無しさん
11/10/18 17:15:20.84
むしろ例えばなんて聞いてるような奴が開発やってること自体
理解できない俺はおかしいのか?
236:デフォルトの名無しさん
11/10/18 17:17:22.49
メタファの使用は開発現場ではごく普通だろ
237:デフォルトの名無しさん
11/10/18 17:21:10.95
例えばでMVCのM
データベース自作してるやつがいる
知らなくても流れみればわかる話だろ
238:デフォルトの名無しさん
11/10/18 17:24:02.51
>>234
依存部分と非依存部分をきっちり分けて、
依存部分は取り替えられるようなつくりにしとけばいいんだよ。
239:デフォルトの名無しさん
11/10/18 17:24:25.37
MVCのMとデータベースは直接的な関係はないじゃん?
ORMの話か?
240:デフォルトの名無しさん
11/10/18 17:25:52.50
>>238
POSIXは非依存部分と考えていいの?
241:デフォルトの名無しさん
11/10/18 17:26:42.41
まあ必要性がわからなかったり、そもそも必要がない人は、ガチガチに依存して書いておけばいいんじゃね?
書き捨てならその方が手間はかからないし。
242:デフォルトの名無しさん
11/10/18 17:30:57.68
>>240
いやだから、ファイルI/Oのモジュールを差し替えられるようにしとけば、
POSIX使うのとかWin32使うのとか、そこだけ作って差し替えれば
よそに持っていった時に最適な方法を使えるじゃん。
POSIXなら概ね非依存だろうけど、最適かどうかはまた別だよね。
243:デフォルトの名無しさん
11/10/18 17:36:41.25
POSIXならWindowsでもMacでもUnixでも使えるじゃん。
いちいちWin32やCocoaで使えるインターフェース設計してそれ用のラッパ作るのって
そういうライブラリを作るのが目的とかじゃなければ、よっぽど時間と工数に恵まれた
環境じゃなきゃ現実的じゃないべ。
244:デフォルトの名無しさん
11/10/18 17:40:48.52
何? 依存性を考慮して作ったから移植が簡単だと?それは良かった。
先月リリースしたiPhoneアプリのAndroid版を今月中にリリースしてくれ。
言語はたしか、Javaだったな。 じゃ、宜しくっ!
245:デフォルトの名無しさん
11/10/18 17:42:22.60
しかしRDBMSを独自に組めるとかどんだけ頭いいんだ
数十万ステップオーダーだろ
246:デフォルトの名無しさん
11/10/18 17:43:26.74
>>243
まあそうだけど、ちりばめないでまとめておくのは良い習慣でしょ。
247:デフォルトの名無しさん
11/10/18 17:46:05.85
たいがいは、オプソのDBFileで十分だろ。
もちっと性能が求められるなら、いちいち作るよりMySQLの商用ライセンスでも買った方が時間も手間もかからない。
248:デフォルトの名無しさん
11/10/18 17:50:35.06
>>247
そういう話ではないのだが
249:デフォルトの名無しさん
11/10/18 17:51:42.67
俺はアプリに組み込む目的には専らsqlite使ってるな。
C#で書いたツールで作ったデータをiOSで使うみたいな事もできて便利。
250:デフォルトの名無しさん
11/10/18 17:55:13.48
iPhoneの標準DBもSQLiteだしな。
251:デフォルトの名無しさん
11/10/18 18:18:53.77
>>244
いまは Java を使わなくても C で Androidアプリ作れるよ。
もちろんコンパイル時にターゲットは固定されるけど、
現状では ARM がほとんどなので、そこに目をつぶれるなら。
もちろん、ビューの切り替え等は Java の SDK の API 使ったほうが楽なので、
C で書けるからと言って楽なわけではない。
iphone と Android で C で共有というのは、
GUI ではなくロジックの部分を、なるべく C で書いたら、楽に移植できたということでしょ。
252:デフォルトの名無しさん
11/10/18 18:27:48.20
そりゃそうだろ
253:デフォルトの名無しさん
11/10/18 18:47:55.66
プログラマ的思考の奴とシステムエンジニア的思考の奴が言い争ってる感じだな
254:デフォルトの名無しさん
11/10/18 18:49:32.52
それはちょっと違うな
255:デフォルトの名無しさん
11/10/19 04:07:41.41
わりとboostが普通につかえてるな
256:デフォルトの名無しさん
11/10/20 10:14:55.85
むしろ使えないとおかしくね?
257:デフォルトの名無しさん
11/10/20 16:53:11.64
なんで?
258:デフォルトの名無しさん
11/10/20 21:56:49.76
コンパイラはGCCなんだからCやC++同様に使えて当たり前って話だろ
259:デフォルトの名無しさん
11/10/20 22:24:47.85
>>258
既にコンパイラとしてのGCCは捨てた。
260:デフォルトの名無しさん
11/10/20 22:40:16.03
まだ移行中ってとこだべ
261:デフォルトの名無しさん
11/10/24 21:39:25.32
Push通知機能のアプリを受託で実装しています。
自分の登録しているディベロッパーでApp IDsを作成し、
Apple Push Notification serviceを有効にする等の作業で作成した証明書では
とりあえずpush機能を実装できました。
ただお客様の登録しているディベロッパー上で証明書を作成する作業が、
自分のMac上でできるものなのか良くわかりません。
もしPush通知アプリを実装したことのある方、
このあたりのノウハウを教えて頂けたら幸いです。
262:デフォルトの名無しさん
11/10/25 01:06:55.88
URLリンク(journal.mycom.co.jp)
PDFファイルをいじるアプリを作りたくて,中の文字をいじれるように上のサイトを参考にして作ってた
のですが,上のPDF-5.zipにあるコードで作ると,最初のサンプルコード以外PDFファイルだと文字の抽出がうまくいかないのですが
なぜかわかる方アドバイスしていただけませんか?(もちろん新しいファイルとコード内での読みこむファイル名等を変えてはいます)
263:デフォルトの名無しさん
11/10/25 04:41:39.54
>>261
まるでObjC関係ないし、そもそもどうやってリリースするつもりでいたんだよ
264:デフォルトの名無しさん
11/10/25 07:07:10.95
>>261,262
スレチ
265:デフォルトの名無しさん
11/10/25 10:17:28.76
>>261
新Mac板のiphone開発スレで聞いたほうがいいと思う
266:デフォルトの名無しさん
11/10/25 16:23:04.13
C既習を前提としないObjective-Cの入門サイトor書籍ってないの?
Objective-Cはネット探しても他のメジャーな奴に比べてまだまだ少なくて困る
267:デフォルトの名無しさん
11/10/25 16:36:18.80
正直Cの知識が無いやつにObjective-Cを触って欲しくない
268:デフォルトの名無しさん
11/10/25 16:52:16.47
>>266
これ読んで感想教えて。
世界一わかりやすいObjective‐Cプログラミングの授業
URLリンク(www.amazon.co.jp)
269:デフォルトの名無しさん
11/10/25 16:52:17.26
欲しくないっていうか無理でしょ普通に考えて。
270:デフォルトの名無しさん
11/10/25 17:19:34.35
評判いいC入門と評判いいobj-c本に分けて当たったほうが無駄なく済むと思う
271:デフォルトの名無しさん
11/10/25 17:23:29.08
Cを知らずにいきなりObjective-Cをやる奴は、前戯無しでいきなり挿入するようんなもんだろ。
272:デフォルトの名無しさん
11/10/25 18:20:37.05
こないだのテレビ番組じゃド素人が簡単なアプリ作れてたみたいだけど。
273:デフォルトの名無しさん
11/10/25 18:38:26.46
でも、今Macの上で取りあえずC勉強しろって言われても地味すぎてつまらんだろ。
ある程度成果物ができてこないとモチベーションが続かない。仕事なら別だが。
274:デフォルトの名無しさん
11/10/25 19:20:59.67
んー、やっぱしCからやったほうがいいの?
いろんな言語を使うならCをやっといた方がスムーズに新しい言語を学べるかもしれんが、
そうじゃないしCを学ぶのってただの時間の無駄にしか思えなくてあんまCをやる気にならない。
どうせCマスターしてもObjective-Cと違う所がたくさん出てくるんでしょ?
275:デフォルトの名無しさん
11/10/25 19:34:48.45
目的によるけど、iPhone のプログラム作れるようになりたいとかなら、初心者向けの本いっぱい出てるから、
ここでグダグダ言ってないで、さっさと本屋さん行って良さげな本を買ってきて、実際に手を動かすのが一番。
276:デフォルトの名無しさん
11/10/25 20:26:08.72
まあ明確な目的があるなら、とにかく始めるのが一番だよね。
行き詰まったら、その時に必要な知識を仕入れればいいし。
>>274
Objective-CはC+αなんだから、少しも無駄にはならないし、避けては通れないと思うよ。
277:デフォルトの名無しさん
11/10/25 21:14:47.04
んだな。詰まったらC本買う、くらいの気構えでいんじゃね
やってみりゃ、すぐ>>264の言ってることがどういう意味なのか分かる
278:デフォルトの名無しさん
11/10/25 21:15:25.22
わり、>>276さんのまちがい
279:デフォルトの名無しさん
11/10/25 21:43:23.00
まずはK&Rを読み込んでから話だ
Cもできないプログラム言語の初学者に
ObjCはいまいちだと思うが
280:デフォルトの名無しさん
11/10/25 22:20:41.47
ぐぬぬ、Cは避けれそうにもないか・・・?
やりたいこと(作りたいもの)はいろいろ明確にあるんだけどねー。
じゃ、Cからやってきますわ
281:デフォルトの名無しさん
11/10/25 22:41:19.64
>>280
>やりたいこと(作りたいもの)はいろいろ明確にあるんだけどねー。
これが色々明確にあるひとは作る側に回る必要は無いと思うよ。
作れる人はいくらでも集められるし、これがある人は自分で作ってる暇はすぐになくなる。
282:デフォルトの名無しさん
11/10/25 23:20:06.51
K&Rなんて読んだ奴は例外なく糞コード吐くからやめてくれ
283:デフォルトの名無しさん
11/10/25 23:53:36.05
今時Cからやる必要なんて皆無。というか時間の無駄。
284:デフォルトの名無しさん
11/10/26 00:01:47.67
>>283
だから、Cもやった事無い人は何からはじめればいいんでしょう?って質問がそもそもなんで、
是非それに答えてやってください。参考図書とか参考サイトとか。
285:デフォルトの名無しさん
11/10/26 00:07:31.97
Cなんか無理にやらなくていいよ、斜め読み程度で
書店で数冊MacなりiPhoneの本買って、さっさと作り始める方が早い
286:デフォルトの名無しさん
11/10/26 00:15:29.23
>>284
とりあえず始めるほうが早く覚えられる
一見は百聞にしかずと言うだろ
287:デフォルトの名無しさん
11/10/26 01:16:21.79
とりあえず>>285的な感じで始めてみて、しばらくしたら壁にぶつかるから、
そしたらそれを乗り越えられそうな本なりサイトなりを探して読む。以降繰り返し。
実際に行き詰ってみれば、何が足りないのかわかるでしょ。
そしたらその都度知識を仕入れればいいじゃん。
288:デフォルトの名無しさん
11/10/26 01:26:30.85
>>282
ちゃんと読んだことねえだろ
カーニハンはマジ導師
ま、どっちにしろCはいずれ避けて通れないし
Smalltalkも避けれないがな
289:デフォルトの名無しさん
11/10/26 01:47:55.64
K&Rを本当の意味で理解できる奴なんて一握りだからな
下手に齧った奴は糞コードを吐くだけなので薦めない方がいい
290:デフォルトの名無しさん
11/10/26 01:51:03.85
そもそもK&Rは初心者向けのものじゃないよ
291:デフォルトの名無しさん
11/10/26 08:06:16.74
K&Rは面白いからな
薦めたくなるんだよ
292:デフォルトの名無しさん
11/10/26 11:04:46.10
Cを知らんと、なぜオブジェクト変数の宣言に、*がひっついてるのかがピンとこないだろうな。
あと、配列とか、structとか、enumとか、NULLって何?とか、マクロの使い方とか、制御文
や四則演算とか、Core~系APIの呼び出しとか、Cの基本知識は結構大事だと思うよ。
Objective-C++にまで手を出すとなったら、C++の前提として、Cの知識は必須だし。
293:デフォルトの名無しさん
11/10/26 19:36:22.88
さすがにそこまで知らないレベルは、そもそもどんな言語でもまともに扱えないだろうし、
並の知能があれば調べればすぐに分かる。
「Objective-CをやるのにCから始めなければならない」かどうかという話を
「Objective-CをやるのにCの知識は不要」とまで極論付けるのは、どういう思考回路なのか。
294:デフォルトの名無しさん
11/10/26 19:43:40.64
初学の趣味プログラマなら最初は興味が持続するのが大事だしな
ある程度わかりだしたらCとかSTとかの重要性とか
面白さがわかるんじゃなあかな
295:デフォルトの名無しさん
11/10/26 19:44:18.94
だからといって害になりかねない初心者本はオススメ出来ないな
296:デフォルトの名無しさん
11/10/26 19:45:21.10
初心者にとってCでやっかいなのは、たぶんポインタがらみだよね。
で、objcをやるにしても、ポインタがらみは普通にわかってないと困るんじゃないの?
297:デフォルトの名無しさん
11/10/26 19:47:49.27
まあ必要性を感じたところで勉強すればいいわけだけど。
298:デフォルトの名無しさん
11/10/26 20:16:54.42
NSString *str; とかの * はオブジェクトを表すお約束だと思えばポインタ分からなくても大丈夫だったりするんじゃないかな。
(で、error:(NSError **)error ではまる。)
299:デフォルトの名無しさん
11/10/26 22:04:46.92
たまに、Appleのソースでも、->演算子をみかけたりするけどな。
300:デフォルトの名無しさん
11/10/26 22:14:38.37
他人が書いたコードを読めないっていうのは、勉強する上でも圧倒的に不利だね。
301:デフォルトの名無しさん
11/10/26 22:37:28.00
rubyCocoaとかのLLバインドが初学者向けに正式に定着すりゃ良いんだけどねえ
302:デフォルトの名無しさん
11/10/27 05:16:00.94
>>298
>(で、error:(NSError **)error ではまる。)
まさに、それどういう意味なのかな?
303:デフォルトの名無しさん
11/10/27 07:55:25.90
普通にオブジェクトが参照で
変数に入れれる言語が多いしね
扱い違うのは混乱するのかね
STよりにF-Scriptみたいなの欲しいね
304:デフォルトの名無しさん
11/10/27 09:19:53.29
>>293
そういう話をしているのではなくて
「プログラミング未経験者なんだけどそういう人にお勧めの本はない?」
に対して「Cの入門書やってろ!」から入るからおかしな事になってるんだろう、
まあ、そういう本でオススメできるのが無いと言うのが一番問題なんだけど。
C++だってCの知識は必要だけどだからといっても未経験者がC++を学ぶ為にいきなり読み始める
事を前提とした本はあるだろ。そうでないと目的に到達する前に力つきるよ。
例えば、K&Rが良いと聞いてこれを読み始めてXcodeでのhello world!にたどりつけない人もいる気がする。
305:デフォルトの名無しさん
11/10/27 10:13:03.10
お前何十年も修行して達人にでもなるのを待ってから戦場に出るつもりか?
気の長なげェ話だな
ベルセルク 第24巻より
306:デフォルトの名無しさん
11/10/27 12:15:06.03
戦わずして勝つ…!
ニートより
307:デフォルトの名無しさん
11/10/27 12:48:49.80
果報は寝て待つ。
生活保護受給者より
308:デフォルトの名無しさん
11/10/27 14:09:59.88
目的意識と行動力が強い人なら
とっくに開発環境とサンプルコードダウンロードして
見よう見まねで作り始めてるさ
309:デフォルトの名無しさん
11/10/28 04:01:03.09
まともな判断力があるならiOS/Androidやるかな・・いまは
310:デフォルトの名無しさん
11/10/28 10:04:19.52
iOSで動作するAndroidってでないかなぁ。
技術的には可能だと思うけど。
311:デフォルトの名無しさん
11/10/28 10:11:56.48
仮想環境?
312:デフォルトの名無しさん
11/10/28 20:08:56.79
Wine(Win32 API over POSIX)みたいなものかな?
個人的には、逆にAndroidで動作するiOSが面白そうに思える
あるいはCocoa over Windowsでもいい
技術的には可能なはず....(誰がやるん?という話は置いといて)
GNUstepはWindows版もあるけど、なかなか安定していない
PDA(あるいはTablet device)だと、GNUstepをベースにした
mGSTEPという軽量版があって、これはSHARP Zaurs等で動く
ただしXlib前提なので、それがAndroid移植のネックになるかも
313:デフォルトの名無しさん
11/10/28 20:12:00.62
bsd系のOSにはlinuxのエミュレーションがあったりするから、やれば出来そうだね。
314:デフォルトの名無しさん
11/10/28 20:14:31.04
Android上で動作するiOSって難しいと思うなぁ。
エミュレータレベルなら出来そうだけど。
iOS上のAndroidは比較的簡単じゃね?
Android端末はLinuxにAndroidスタックをポーティングしてる。
iOSにもポーティングできるだろ。
しかもオープンソースだし。
315:デフォルトの名無しさん
11/10/28 21:42:33.50
技術的には可能でもアポーが許可しないよ。Adobe Flashと同じ様に。
316:デフォルトの名無しさん
11/10/28 23:08:40.21
>>314
階層化アーキテクチャという言葉を知っているかい?
AndroidがスタックしているのはLinuxカーネル上であって
(POSIX互換な)Linux API上ではない。残念ながらiOSは
クローズソースだから、外の人はカーネルIFは触れない
従って、Androidは対Linuxには移植が容易でも
iOS上への移植は技術的に困難を極める
後は仮想環境だけど、期待される性能を出すのは(おそらく)困難だろう
オープンソースだから何でもできると考えるのは浅はかな素人思考
317:デフォルトの名無しさん
11/10/28 23:10:24.95
脱獄しちゃえばJAVA走るしiDroidなんてのもあるから光明ありそうだけど、Appleのお墨付きは絶望的だろうねえ
318:デフォルトの名無しさん
11/10/28 23:16:56.37
Androidはとっととx86出せと。ポーティングはあるが、3系がなくて片手落ちだ。
319:デフォルトの名無しさん
11/10/28 23:17:25.20
>>316
bsd系のOSってlinuxのバイナリをそのまま動かすための機能が入ってるのが多いけど、
それはlinuxのカーネルインターフェイスをエミュレートするものだよ。
だから同じような方式で出来そうなもんだけどね。
320:デフォルトの名無しさん
11/10/28 23:24:02.49
>>312
>あるいはCocoa over Windowsでもいい
YellowBox for Windows?
わりと安定して動いてたんだけどね。まあ、方向性が違っちゃったって事で。
321:デフォルトの名無しさん
11/10/28 23:30:50.26
>>319
階層化アーキテクチャという言葉を知っていますか?
BSDのLinuxエミュレーションはBSDカーネルIFが公開されていて、
しかもBSDカーネルのコード自身もオープンだから実現できた技術
どちらもUNIX由来のカーネルIFでカーネル空間内で実行されるから、
一般的な用途ではまず支障のない性能(低オーバヘッド)を達成できた
カーネルIFが公開されていないiOSとは、まったく事情が異なりますヨ
322:デフォルトの名無しさん
11/10/28 23:37:58.26
>>321
iOSのカーネルってXNUじゃないの?
323:デフォルトの名無しさん
11/10/28 23:41:41.28
いや、自分はiOSハッカーとかそういう類の人じゃないからよくしらないけどね。
JBの仕掛けを作ってる人たちはその気になればそれなりにやれるんじゃないのかと思って。
324:デフォルトの名無しさん
11/10/29 06:08:16.09
>>321
AndroidがLinuxカーネルにポーティングされてるからって、iOSでもカーネルにポーティングしなきゃならんわけではなかろ?
Androidの下側のインターフェイスは公開されてるんだから、階層が違っても可能だと思うがなぁ。
確かにパフォーマンスは期待できないかもしれないが。
325:デフォルトの名無しさん
11/10/29 08:00:45.98
「階層化アーキテクチャという言葉を知っていますか?」
と言っておけば取り敢えず何か言った気になれるということを学習した
326:デフォルトの名無しさん
11/10/29 11:46:57.99
試してないけどin-the-boxていう
DalvikのiOSポートがあるね
327:デフォルトの名無しさん
11/10/31 22:10:34.20
>>326
インストールしてみた
デモの通りにjavaのclassをdxしたjarが動いた
Hello Worldなw
328:デフォルトの名無しさん
11/10/31 22:16:25.02
>>321
カーネルインターフェイスってなんだよw
Androidのアプリは基本vmで動いてるんだし
libcなどのライブラリもある
まるごとAndroidのシステムを動かす必要はないんだしな
329:デフォルトの名無しさん
11/10/31 22:17:58.76
まだ続いててワロタ
330:デフォルトの名無しさん
11/11/01 08:14:42.13
必死で反論を考えて痛んだろw
331:デフォルトの名無しさん
11/11/01 21:09:15.58
初めて見たとき、@" "とか[]とか*とかで、なんか気持ち悪い!って思いましたが。
やってみるといいですねこれ。
332:デフォルトの名無しさん
11/11/02 12:37:24.21
NetHack厨だった俺には特に違和感なかった。
333:デフォルトの名無しさん
11/11/14 22:37:26.50
シングルトンインスタンスの作成
URLリンク(developer.apple.com)
このListing 2-15 シングルトンの実装の最後に
「必要に応じて割り当てと初期化を通じて他のインスタンスを作成する機能も必要になることがあります。そのような場合は、Listing 2-15に示したようにallocWithZone:以降の各メソッドをオーバーライドしません。」
ってあるんですが、
このシングルトンにプロパティを持たせる場合は「+ (MyGizmoClass*)sharedManager」だけ残して後は消してね。って意味でしょうか?
その場合、どうやってプロパティを初期化するんでしょうか?
334:デフォルトの名無しさん
11/11/14 23:21:21.21
>>333
> 「+ (MyGizmoClass*)sharedManager」だけ残して後は消してね。って意味でしょうか?
そういう意味だと思います。
> このシングルトンにプロパティを持たせる場合は...その場合、どうやってプロパティを初期化するんでしょうか?
で、そのプロパティの話はどこから出て来たんだ?
まあ、プロパティの初期化なら、単純にinit...メソッド書くだけだけど?
335:デフォルトの名無しさん
11/11/15 00:18:04.53
>>333
>>334 氏も触れているが、プロパティを持たせる件はどこから?
「インスタンスを作成する機能が必要な場合は」だよね。私には使いどころがイマイチわからないけど。
で、このドキュメントは英語版で更新されているので微妙に悩んだらそちらをあたってみる事もオススメ
します。実装も少し変わってるし。
URLリンク(developer.apple.com)
336:デフォルトの名無しさん
11/11/15 01:08:18.27
横からなんだが、
英語の方のsynchronizedが消えた理由と、
allocWithZoneでretainしているのに、copyWithZoneでしていない理由がワカラン
どうでもいいと言えば、それまでなんだけどさ
337:デフォルトの名無しさん
11/11/15 08:46:22.78
プロパティってのはこのシングルトンのインタンス変数にアクセスするためのインターフェースの事です。
そのプロパティにアクセスした時の初期値を>>333のシングルトンのコードの場合、どこで初期化するば良いのか知りたかったのです。
シングルトンがインスタンス変数を持つ場合は>>333のコードの+ (id)allocWithZone:以降はいらないとなると
残った+ (MyGizmoClass*)sharedManagerの中で問題ってことですよね。
>>335の英語版ドキュメントの方が新しいので今後はそちらを参考にしょうと思います。
>>336
シングルトンなのでコピーさせないようにしてるのでは。
338:デフォルトの名無しさん
11/11/15 09:23:49.53
そもそも、シングルトンを複数生成やコピーできないようにするコードって必要なの?
プログラマが気をつければ済む話じゃない? ARC に移行したら retain や release は使えないし。
まぁ大規模プロジェクトや不特定多数に使われるライブラリなら分かるけど。
って訳で、+ sharedXXX だけ定義して使ってる。
インスタンスが必要なければクラスメソッドで済ませちゃうし。
339:デフォルトの名無しさん
11/11/15 09:27:12.68
>>336
実装が変わってるのは旧版だとアナライザちゃんが警告するんだけど?って文句が出たから
言ってみれば今のはアナライザちゃんを騙すためのごまかしが入ってる
340:デフォルトの名無しさん
11/11/15 09:36:00.88
>>338
俺もそんな感じで使ってる。趣味開発なら問題無いしな。
>>339
なるほど。納得した。
でもsynchronizedまで外していいのかね。
341:デフォルトの名無しさん
11/11/15 10:33:21.52
>>338
別のクラスの中に埋めたりした時にもシングルトンである事を保証したいような時に使うかな?
シングルトンなオブジェクトを別のオブジェクトに埋めないように気をつけるか、
埋めたオブジェクトを複数生成したりしなければ問題ないかと。
でも、これらに気をつけながら使うぐらいならわざわざシングルトンの実装はしないな。
342:デフォルトの名無しさん
11/11/15 11:52:35.79
>>341
埋めるってどうやって? C++ なら分かるけど、ObjC だとポインタで持つしかないよね? サブクラスのこと?
343:デフォルトの名無しさん
11/11/15 19:40:25.28
>>337
> プロパティってのはこのシングルトンのインタンス変数にアクセスするためのインターフェースの事です。
なんか、「プロパティ」と「インスタンス変数」と「インターフェース」の言葉の意味をどう解釈して良いのか分からないぐらい、意味不明な内容なのだが...
普通に考えると、シングルトン・オブジェクトにアクセスするインターフェースは、+ (MyGizmoClass*)sharedManagerということになると思うのだが。
344:デフォルトの名無しさん
11/11/15 20:39:14.03
>>343
また横からなんだが、
@interface Singleton : NSObject {
int value;
}
+ (id)sharedInstance;
@property int value;
@end
ならvalueプロパティが、インスタンス変数valueにアクセスするインターフェースになるんじゃ
それと今は、
NSFileManagerのように、defaultManagerとalloc-initで得られるインスタンスが異なるから、
そういうケースでalloc以降をオーバーライドすると、allocしたやつがreleaseできなくなるって話だよね?
プロパティ持たせるだけなら、alloc以降もオーバーライドしないといかんし。
345:デフォルトの名無しさん
11/11/15 20:55:39.70
>>344
そういうことなら、結局のところ、シングルトンのプロパティはinit...メソッドの中で初期化すればいい。
という話でいいのかな?
346:デフォルトの名無しさん
11/11/15 22:08:05.03
>>345
alloc-initでshared...と同じインスタンスを返す仕様だと、
initをオーバーライドしないと、alloc-initで取得した場合に、
初期化済みのインスタンスに再度親クラスのinitを呼ぶことになるから、
それが嫌なら、何らかの対策は必要になるんじゃないかな。
NSObjectのinitなら単にself返すだけとドキュメントに書いてあるけどね。
347:700
11/11/16 10:32:58.96
これからiPhone/iPodのアプリの開発をはじめたいんだけど、
端末は第三世代と第四世代の2つ(どっちかをiPhone、もう片方がiPod Touch)
があればいいのかな?
348:デフォルトの名無しさん
11/11/16 10:52:47.63
スレ違いだから良く分からんが全部持っとけばいいんじゃね?
ObjCがどれでも使えるのは間違いないよ
349:デフォルトの名無しさん
11/11/16 21:45:17.31
iPhoneアプリのInstagramみたいにiOS5のTwitter機能使いつつ投稿クライアント名を任意にしたいんだけど、どうすればいいの?教えてエロい人
350:デフォルトの名無しさん
11/11/20 05:27:53.65
勉強してみるかな
351:デフォルトの名無しさん
11/11/20 16:07:25.96
UIView.hにある以下は何を表しているのでしょうか?
@interfaceは class : supper class という書き方しか知らないのですが。
@interface UIView(UIViewGeometry)
352:デフォルトの名無しさん
11/11/20 16:48:17.24
>>351
>>3
353:デフォルトの名無しさん
11/11/23 17:23:22.58
windows7 でのGNUStepのgccにてobjective-cなのですが、
@autoreleasepool { }ブロックがコンパイルできなくて困っています。
これがコンパイルしたいコードです
//main.m
#import <Foundation/Foundation.h>
int main(void)
{
@autoreleasepool {
id obj = [[[NSObject alloc] init] autorelease];
}
return 0;
}
Makefileです
main.exe: main.o
gcc $^ -o $@ -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base -enable-auto-import
main.o: main.m
gcc -c -o $@ $^ -I /GNUstep/System/Library/Headers -fconstant-string-class=NSConstantString
clean:
@rm -rf *.exe *.o
354:353
11/11/23 17:25:18.76
エラー内容です。
main.m: In function 'main':
main.m:6:2: error: stray '@' in program
main.m:6:3: error: 'autoreleasepool' undeclared (first use in this function)
main.m:6:3: note: each undeclared identifier is reported only once for each func
tion it appears in
main.m:6:19: error: expected ';' before '{' token
355:デフォルトの名無しさん
11/11/23 17:31:23.78
autoreleasepoolやめて手で書けば
356:デフォルトの名無しさん
11/11/23 17:34:49.11
>>353
blocksにはClangが必要
357:353
11/11/23 17:38:55.56
>>356
ありがとうございます。
そうなんですか・・・
MaxでのXCodeでもそうなんですか?
358:デフォルトの名無しさん
11/11/23 17:40:30.07
>>356
なんでBlocks? ARCの話だろ
359:デフォルトの名無しさん
11/11/23 17:41:54.49
ARCの話ともちょっと違うかも
360:353
11/11/23 18:31:18.30
調べてみたらMaxでも新しいXCodeなら使える?らしいですね
URLリンク(stackoverflow.com)
手でNSAuto~でやることにします。
ありがとうございました。
361:デフォルトの名無しさん
11/11/23 20:00:10.17
gccを使わず、clangにすればいい。
362:デフォルトの名無しさん
11/11/23 21:18:00.25
winでgnu stepでgccとかって
なんかの修行?
363:デフォルトの名無しさん
11/11/23 22:04:37.76
>>362
今手元にMacが無いんですが、今後objective-cやる予定があって、
その練習です。なのでこの環境でアプリ作る予定ではないです。
>>361
clangでやったらヘッダーが無いとか色々怒られて面倒になってしまいました
364:デフォルトの名無しさん
11/11/23 22:06:06.40
勉強なら仮想環境(VMWare)上でやればいい
365:デフォルトの名無しさん
11/11/23 22:52:42.88
>>364
う~んどうやらグレーな感じですし、今回はやめておきます。
366:デフォルトの名無しさん
11/11/23 23:07:28.63
プログラミングで遊ぶのにMacいいよ
いい機会だし一台手に入れてみては
367:デフォルトの名無しさん
11/11/23 23:13:34.83
>>366
お金たまったら手に入れたいな~と妄想中ですわぁ
368:デフォルトの名無しさん
11/11/24 01:08:58.21
Mac Mini買っとき
369:デフォルトの名無しさん
11/11/24 09:49:52.99
miniは、なかなかよい
370:デフォルトの名無しさん
11/11/24 23:51:19.37
色の配列を作成したい。
Color list[] = { "ffffff", "ffcccc" };
みたいなことをしたい。
371:デフォルトの名無しさん
11/11/25 00:15:01.31
共通の定数を定義したcommon.hを作成し、
他の複数のファイルから#importするとリンクエラーになる。
回避策ない?
372:デフォルトの名無しさん
11/11/25 00:25:13.62
なにをどんな風に書いてんの?
373:デフォルトの名無しさん
11/11/25 02:20:26.39
インポートは何回やってもいいはずだが、
インクルードはだめだけど
374:デフォルトの名無しさん
11/11/25 02:29:13.98
同じ定義が複数のファイルに含まれる事になってduplicate symbolとかそんな話でしょ。
375:デフォルトの名無しさん
11/11/25 18:25:59.32
extern使え
376:デフォルトの名無しさん
11/11/25 21:42:59.95
377:デフォルトの名無しさん
11/12/01 00:06:34.95
クラスの引数のラベルって第2引数からしかつけられないのかね?
第1引数はメソッド名がラベル扱い?
378:デフォルトの名無しさん
11/12/01 00:22:32.62
VBとかの引数ラベルとはまた別の考えの物だから
379:デフォルトの名無しさん
11/12/01 00:23:01.83
137:デフォルトの名無しさん :sage:2010/10/17(日) 12:28:41
メソッドの第一引数のコロンの前はメソッド名なのに、第二引数以降はコロンの前がラベルになってる。
アンバランスな気がするんだけど、言語デザイン的に理由があるのかね。
コロンを縦に並べたときの見栄えのためだけに、第一引数の前のラベルはなかったことにしたの?
138:デフォルトの名無しさん :sage:2010/10/17(日) 14:07:02
全部メソッド名なんだが。
ラベルなんてものはない。
140:デフォルトの名無しさん :sage:2010/10/18(月) 10:28:46
URLリンク(developer.apple.com)
ラベルって呼ぶんだよね、実は。
便宜上そう呼んでるだけっぽいけど
143:デフォルトの名無しさん :sage:2010/10/18(月) 14:00:40
>>140
ObjCの専門用語としてラベルって言ってるんじゃなくて
日常英語としてラベルって書いてるんだろうね
380:デフォルトの名無しさん
11/12/01 01:37:00.20
構文では単にセレクタとなってるね
しかしそもそも第一引数にも:ついてる
381:デフォルトの名無しさん
11/12/01 01:39:55.72
allocみたいな:がない奴は単項セレクタで引数ではない
382:デフォルトの名無しさん
11/12/06 09:23:40.61
CもC++もObjCも慣れたらどうってことは無いな
ObjCは活躍の場が限られすぎるところが問題だが
383:デフォルトの名無しさん
11/12/06 11:08:23.45
勝谷君
384:デフォルトの名無しさん
11/12/06 13:10:38.28
やってみる
385:デフォルトの名無しさん
11/12/06 16:48:51.89
質問です。
ObjCではシングルトンインスタンスは作りっぱなしのコードばかり見つかるんですが、
それはOSがお片付けしてね!って思想ですか?
もちろんメモリ以外のリソースは、
それ用のメソッドを用意しなければならないですが。
386:デフォルトの名無しさん
11/12/06 16:52:33.36
シングルトンを一々解放する必要がある設計ってなによ?
387:デフォルトの名無しさん
11/12/06 17:20:59.95
>>385
他の言語だといちいち自分で解放するの?
388:385
11/12/06 17:26:03.67
CやC++でヒープに確保していたシングルトンインスタンスは解放していたので。
ただ解放しないという方針でよさそうですね。
ありがとうございました。
389:デフォルトの名無しさん
11/12/06 17:53:40.59
自力リファレンスカウンタ方式なら通常運用で解放できるんじゃね?
static long refCount = 0;
@implementation Hoge
static Hoge *sharedInstance = nil;
- (id)allocWithZone:(NSZone *)zone
{
refCount++;
// 以下テンプレ通り
}
- (id)retain
{
refCount++;
return self;
}
- (id)autorelease
{
[[[Foo alloc] initWithObj:self] autorelease];
return self;
}
- (oneway void)release
{
if(--refCount == 0) [self dealloc]:
}
@end
@implementation Foo
- (id)initWithObj:(id)inObj { obj = [inObj retain]; }
-(void)dealloc { [obj release]; [super dealloc]; }
@end
とか
390:デフォルトの名無しさん
11/12/06 19:05:51.90
@imp...
+ (id)alloc...{
if (!sharedInstance) { ... }
...
}
- (void)dealloc {
...
sharedInstance = nil;
}
...
@end
参照カウンタはNSObject任せでいいような。
391:385
11/12/06 21:14:15.76
>>389-390
状況によってはこっちの挙動のがいい場合もありそうですね
ありがとうございます。
392:デフォルトの名無しさん
11/12/06 23:27:40.83
>>389
面白いなあ。キミ頭おかしいんじゃね?
自力リファレンスカウンタ(笑)
393:デフォルトの名無しさん
11/12/10 15:24:50.29
UDPプログラムを作っている時、エラーが出てきてとれません。
参考サイト
URLリンク(www.geekpage.jp)
エラーが出ているところ
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
エラー内容
file://localhost/Users/user1/Desktop/wol/wol/Wol.m: warning: Semantic Issue: Implicit declaration of function 'inet_addr' is invalid in C99
なにか追加したらいいんでしょうか?
394:デフォルトの名無しさん
11/12/10 15:48:59.03
#include <arpa/inet.h>
395:デフォルトの名無しさん
11/12/10 16:06:42.01
>>394
ありがとうございました。それで消えました。
396:デフォルトの名無しさん
11/12/10 16:13:02.79
スレチだしエラーくらい自分で読めって感じだけどな。
397:デフォルトの名無しさん
11/12/10 16:31:48.37
ググればすぐに解決することを聞いてくる奴は無能以下だよな
398:デフォルトの名無しさん
11/12/10 21:20:09.88
>>397
未満だろ
無能に謝れ
399:デフォルトの名無しさん
11/12/10 21:35:34.54
文脈をみれば以下で自然。
予想以下とか、予想を含まないから。
400:デフォルトの名無しさん
11/12/10 23:47:57.37
困った、バカだ
401:デフォルトの名無しさん
11/12/11 10:33:32.17
以下でOK
402:デフォルトの名無しさん
11/12/14 11:35:33.11
すみません。教えてください。
(1)を(2)に書き換えるべきか悩んでいるのですが、(2)のほうがメモリの効率は良いのでしょうか?
(NSStringの割り当てはメモリに残り続けると何かで読んだので、気になっています)
それとも、これはあんまり意味のない書き換えで、メモリがきついなら、ループの何回かに一回、
NSAutoreleasePoolを挟んでおけばおkですか?
(1)NSString
for(int i = 0; i < newDataArray.count; i = i + 1) {
NSString *threadString = [newDataArray objectAtIndex:i];
<中略>
}
(2)NSMutableString
NSMutableString *threadString = [[NSMutableString alloc] init];
for(int i = 0; i < newDataArray.count; i = i + 1) {
[threadString setString:[newDataArray objectAtIndex:i]];
<中略>
}
[threadString release];
403:デフォルトの名無しさん
11/12/14 11:40:38.13
(1) の方が良いに決まってるだろ。
> [threadString setString:[newDataArray objectAtIndex:i]];
Array から取り出した String を一々コピーしてどうする。
404:402
11/12/14 11:51:41.88
>>403
ありがとうございます。
メモリに残るというのは、NSString *msg = @"hoge"; のように定数を設定した場合の話ですよね。
助かりました。
405:デフォルトの名無しさん
11/12/14 11:53:40.04
処理が要素を読むだけなら(1)の一択
>NSStringの割り当てはメモリに残り続けると何かで読んだので、
意味が分からない NSStringリテラルの話?
あと、高速列挙使った方がいいかな
int i = 0; // インデックスが必要なら
for(NSString *threadString in newDataArray) {
// なにかする
i++; // インデックスが必要なら
}
>NSAutoreleasePoolを挟んでおけばおkですか?
うん
406:402
11/12/14 12:13:56.07
>意味が分からない NSStringリテラルの話?
リテラルの話です。仕様の細かい話を読んで、理解しきれず変に混乱してしまったみたいです。スマソ。
>あと、高速列挙使った方がいいかな
使ってなかった。ありがとー!
407:デフォルトの名無しさん
11/12/18 07:48:15.32
plistファイルを読み込みたく、以下のように記述しました
NSString *path = [[NSBundle mainBundle] pathForResource:@"hogehoge" ofType:@"plist"];
NSArray *array = [NSArray arrayWithContentsOfFile:path];
しかし、これだとerror: initializer element is not constantがでます
そういう場合はどこに原因があるのでしょうか
408:デフォルトの名無しさん
11/12/18 08:42:27.37
>>407
エラーメッセージでぐぐれ。
書く内容の問題ではなく、書く場所の問題。メソッド (や関数) の中に書けば OK。
409:デフォルトの名無しさん
11/12/20 22:02:15.93
これで独立できる
売るものはスマートフォンアプリ WEBサイト運営
サーバーはクラウド VPS
電話はスマートフォンSkype
オフィスは地方にプレハブ型の格安高性能オフィスを建て(300万~500万)
レンタル自習室&シェアオフィスで収入を得ながらそこで開発する
URLリンク(bit.ly)
URLリンク(bit.ly)
410:デフォルトの名無しさん
11/12/21 00:31:16.55
地方でシェアオフィスが成功すると信じるあなたは事業失敗に突き進むと予言しときます
411:デフォルトの名無しさん
11/12/21 08:17:47.23
>>410
それ、定期的に流れるスパムだよ
412:デフォルトの名無しさん
11/12/21 17:21:27.29
クラスの中で変数をセットする場合って、たとえば、
name = @”hoge”; ではなく、self.name = @”hoge”; もしくは、[self setName:@”hoge”];とやるべき?
publicな変数にそうしたほうがいいのは分かるけど、作法として、privateな変数にまでそうやるべきもの?
privateを含む全ての変数に@property,@synthesizeを設定するのは、ちょっと面倒に感じるのだけど。