Objective-C [ObjC part:6];
*** 警句 *** 汝、retainCountを数える事なかれ そは、理を知り真理に触れし者のみが振える御技 汝、オーナーシップの本質を見よ そは、相反する一対の調和を守る事也 allocにはreleaseを。copyにはreleaseを。retainにはreleaseを。 アーメン
objcはgtagsできないわけ?
Objective-Cの言語的な面白さや美しさってどこですか?
9 :
デフォルトの名無しさん :2011/08/26(金) 07:12:02.43
age
円高なんとかしろよ、このヤロー!
うるせーバカヤロー!
すごいバグ発見したのだが。。。。 配列の要素の入れかえで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);
>>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
)
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 ) で?
これは、どういうバグだ?
初心者は自分の頭がバグってるという好例
正常にみえるけど、どこがバグってるの?
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]);
キャンセルする前に実行されてしまったとか?
>>22 cancelAllOperationsは[op cancel]するだけじゃなかったっけ。
Operationが停止するまで待ちたいなら、
その後にwaitUntilAllOperationsAreFinishedを追加かな。
>>23 テスト的に10秒くらいかかる処理にしてるのでそれはないです。
>>24 むしろ[op cancel]してもらえればop側で処理を停止するように書いてあるので
cancelメッセージを送信してほしいんですが、調べてみると送っていませんでした。
これが原因だと思います。なぜ送信しないかは不明です。
ちなみにwaitUntilAllOperationsAreFinishedはopが実行完了するまでスレッドを
ブロックするメソッドのなので、やりたい事とちがいます。
ちなみにNSOperationQueueの初期化を下記のようにすると
きちんとキャンセルされます。
self.queue = [[[NSOperationQueue alloc] init] autorelease];
mainQueueはまさに実行中のメインスレッドのキューだから、エンキューしたとたんにすぐ実行されて キャンセルが間に合わないんじゃないの? 別に作ったキューは、エンキューしてから実際に実行されるまで間があるだろうから、実行前にキャンセル できたのでは? ドキュメントでも、一旦実行されたオペレーションのキャンセルができるかどうかは、オペレーション側の 実装次第ってかいてあるし。 キューに残っているオペレーションのステータスを確認してみたら?
mainQueue は共有資源で、他でも使ってるかも知れないのに cancelAllOperations してもいいのかな? あと、残った 1 は、まさに cancelAllOperations を実行中の operation かも。 •cancelAllOperations の前には operations の数はいくつあったか •cancelAllOperations で自分の作った operation がいくつ cancel されたか を確認すべきでは?
>>22 NSOperationQueueにCancelAllOpetationを送ってもQueueからは削除されずに、全てのOperationをCancel状態にするだけです。cancel状態の時はmainメソッドは呼ばれないのです。昔、10,000個近く突っ込んでえらい目にあった(笑)
>>28 mainQueueのときはそもそもcancelを呼ばない?から、ちょっと違う問題な気がする。
ユーザーの操作に応答しなくなるだろうから、mainQueueに突っ込むメリットがあまり無いと思うんだけど、
どういう時に使うんだろうか。
mainQueueって、RunLoopで処理されるキューでしょ? cancelしたあと、一度RunLoopに戻ってみたら?
31 :
29 :2011/09/05(月) 01:49:04.35
>>30 cancelが呼ばれず、オペレーションを終了できないので、
戻す方法がわかりません。
(個別にcancelを呼べば、終了できる)
オペレーションの実装に問題があるような気がする。実行中にCancelが呼ばれた時の処理がうまくできてないとか。
33 :
29 :2011/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]; }
いい加減ウザイからNSOperationのリファレンス見たけど 理由と思われるものがちゃんと書いてあるよ 長いから自分で読んでね! Responding to the Cancel Command って所もね
35 :
29 :2011/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.
cancelは、少なくともキュー内にそのオペレーションが確実に存在してて、 実行前か、実行中じゃないと呼ばれないと思うので、エンキューと、キャンセルの タイミングが書かれてないと、なんともわからない。 cancelが呼ばれた時のキューの中身と、各オペレーションのステータスを表示 してみたらいいんじゃあるまいか。 もしかしたら、メインキューの場合、次のループまで実際の処理が遅延するとか あるのかもしれない。まぁ結構適当に書いた。
1秒かかるオペレーションを10個ほど突っ込んで -cancelAllOpetation 呼んで見れば何か分かるんじゃないかな?
動作確認用のサンプルコードを書いて見た。 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 :2011/09/05(月) 18:55:37.71
書き忘れてたけど、GCは必須ね
なにを動作確認しようとしているのか、さっぱりわからない。 キャンセルしようとした時にキューの中がどうなっているのかを確認しないと。
ようするに、cancelAllOperationsを呼んでもキャンセルされない、ということだ
Func2が実行されたのは、cancelが呼ばれた時点で、既に実行されてて間に合ってないからじゃないの。 だから、cancelを呼ぶ時点でのキューの中身とそれぞれのステータスを確認してみないと意味ないよ。 何回も指摘されてるけど、ドキュメントには、cancelは直ぐに効果を及ぼすとは限らないって書いてあるよね。
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"); }]; ...続く
[[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; }
すまん間違った。忘れてくれ。
>>42 > Func2が実行されたのは、cancelが呼ばれた時点で、既に実行されてて間に合ってないからじゃないの。
何を言っているのか、いまいち分からないのだが、
まず、君の言う「cancel」って-[NSOperation cancel]のこと?
それとも、-[NSOperationQueue cancelAllOperations]のこと?
>>42 さっきから、RunLoopの話が出ている訳だが、このコードがシングルスレッドで動いていることは、分かっているよね?
ちょっと試してみたが、
>>38 の言うとおり、メインキューでは、cancelAllOperationsはきかないみたいだな。
allocして作ったキューではきく。違いは何かというと、シリアルか非同期かいうことか。
説明がドキュメントにみあたらないげと、もうそういう仕様ということでいいんじゃね?
メインキューはUIも処理するから、本来時間のかかる処理をメインキューでやるべきではないし。
GCDで書いてシングルスレッド?あるのか。
>>37 ,42 説を推すが。
>>49 GCDじゃなくて、あくまでNSOperationだから。じゃないのか?
-[NSOperationQueue cancelAllOperations] に breakpoint 設定して、 アセンブリコードおっかけて見りゃわかるが、 mainQueue の時だけ「何もしない」処理になってる。 mainQueue は共有資源なんだからこれはこういう仕様なんだろう。 cancelAllOperations で意図しない operation が cancel されないように。
>>49 メインスレッドで実行することを指定しているのだから、逆にマルチスレッドにはなれないだろう。
UIのイベント処理なんかもオペレーションが使われてんだっけ?
いや、
>>51 で意図しない operation が cancel されないように。ってあったから、
意図しないオペレーションってどんなんかなと思って。
>>56 マルチスレッドな環境では、あるスレッドで実行されているNSOperationの内部で、mainQueueに新しいNSOperationを追加するかもしれない。
だから、ある時点でメイン・スレッドのRunLoopに、どんなNSOparationがスケジュールされているか把握するのは無理。
という意味だと思います。
たとえ、-[NSOparationQueue operations]を呼び出して中身を確認したつもりでも、次の瞬間に新しいNSOperationが増えているかもしれない。
あぁ、でもそれは、MainQueueにかぎらず、GlobalQueue全般についていえることだね。
59 :
29 :2011/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で簡単に回避できるので、個別に確認しろという意思表示なのかな。
そもそもmainQueueにぶちこんだoperationをまとめてcancelすることが必要になる設計がおかしい
まぁな
63 :
デフォルトの名無しさん :2011/09/21(水) 15:08:49.54
スマン。基礎的なことを教えてください。 - (NSString *)getString { //@ NSString *msg = @"temp"; return msg; } これでも問題なしで、以下とやってることは同じ? - (NSString *)getString { //A NSString *msg = [[NSString alloc] initWithString:@"temp"]; return [msg autorelease]; } returnすると、中括弧の範囲内で終わるはずのmsgの寿命が、呼び出し元のrun loopに依存するようになるんですよね? Aは問題ないと感覚的に分かるのですが、@はinitせずに一時オブジェクトをreturnしていることにいまでも違和感が。。
定数は一時オブジェクトではないので
char *hoge() { return "hoge";} と一緒
66 :
63 :2011/09/21(水) 16:13:55.92
>>64-65 サンクス
なるほど。
NSString以外でも、NSData *myDataとかでも同じですよね?
returnによって自動でつくautoreleaseのスコープが伸びるのであって、
一時オブジェクトという感覚を捨てたほうがいい感じでしょうか。
何を聞かれてるのかわからないのに無理に答えなくていいです
へぇ
NSString *msg = @"temp"; って NSString *msg = [[NSString alloc] initWithUTF8String:"temp"] autorelease]; または NSString *msg = [NSString stringWithUTF8String:"temp"]; とほぼ同義だと思ってるんだが。@"〜"ってNSString用のシンタックスシュガーだろ。
71 :
63 :2011/09/21(水) 17:06:58.54
return で autorelease が自動でつくなんて初耳だぞ。 returnは関係ないだろ。
>>71 autoreleaseっていうのは、あとでreleaseするために
AutoreleasePoolに突っ込むっていう操作だよ。
returnで自動で付いたりしないしスコープとも関係ない。
63 は任意のメソッドに自動で NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; {//スコープ(笑) ... }. [pool release]; が付いていて、return の際にはスコープが伸びる(謎)とか思ってるんじゃ無かろうか。
>>70 @"〜" は CFSTR("〜") と等価みたいだよ。
伸びるって表現するならスコープじゃなくてライフサイクルでしょ。
スコープに対してエクステントっていうんだぜ
>>75 そうなんだ。@"〜"はautoreleaseされないんだな。勉強になった。
79 :
63 :2011/09/21(水) 18:04:59.00
自分が考え違いをしていたのだけなんとなく分かってきました。
>>72-73 >returnで自動で付いたりしないしスコープとも関係ない。
はい。
>>74 >return の際にはスコープが伸びる(謎)とか思ってるんじゃ無かろうか。
似たようなことを思ってました。
まだ分かってないんですけど、下の@Aは両方とも問題なく使えますか?
- (id)getData { //@
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"
http://hoge/hoge.xml "]];
return data;
}
- (id)getData { //A
NSData *data = [[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"
http://hoge/hoge.xml "]] autorelease];
return data;
}
呼び出すときの有効範囲は中括弧内ですよね?
{
NSData *data = [self getData];
}
何を聞きたいのかがよく分らんな。 まず、スタックとヒープの違い、オブジェクトのオーナーシップ、 メインループとAutoreleasePoolの関係を理解しれ。
>>79 @とAは等価。
@は予めautoreleaseされたオブジェクトをdataに受け取ってる。
Aは自分で生成してautoreleaseしてる。
getDataが返したオブジェクトの有効範囲という意味なら中括弧は無関係。
どこかで現在のAutoreleasePoolが開放されるまでは生きてる。
たぶんフレームワークに制御を戻すまで。
>>79 AppKit とかが AutoreleasePool 作ってるのを、
言語レベルで勝手に AutoreleasePool で括られてると勘違いしてるようだが、それは違う。
変数のスコープと、オブジェクトのライフサイクルがごっちゃになってる気がするな。 { NSData *data = [self getData]; } は、dataという変数のスコープは中括弧内に限定される(中括弧の外で参照しようとしても、 コンパイルが通らない)が、[self getData]から返された実体が実際に破棄されるのは、 次のループのサイクルに戻ってAutoreleasePoolが中身を破棄する時でしょ。 autoreleaseした時点で、AutoreleasePoolに登録されている。 基本的にスコープとオブジェクトのライフサイクルは関係ない。スコープを抜けるときに 自動的にreleaseされることもない。 C++でローカルで宣言したオブジェクトがスコープを抜ける時に呼ばれるデストラクタと ごっちゃになってないか。どっちかっつうと、allocとreleaseの関係は、C++のnewとdelete に近い。でもC++のオブジェクトは参照カウンタによる管理ではないけど。最近のC++は よく知らないが。
じゃあ、混乱させよう 今のMac OS Xでの実装では - (NSString *)hoge { return @"hoge";} - (NSString *)fuga { return [NSString stringWithString:@"hoge"];} で返されるものは同じインスタンス。
85 :
63 :2011/09/21(水) 18:59:36.65
みなさんの説明で、ようやく理解できてきたと思います。
スタックありきで考えていました。すんません。自分がスタックと考えていたもの全てヒープなんですね。
>>79 の@がひっかかっていた理由が、
スタックに制限されると誤解していたので、スコープで理屈がつくよう自分理論を作ってました。
ありがとうございました。いやマジで。
>>84 つまり、クラスクラスタの為せる技ってこと?
>>86 + (NSString*) stringWithString:(NSString*)s { return s; }
っていう実装になってる事に加えて、
コンパイラが同じ内容の文字列定数をひとつにまとめるようになってる
っていう事では?
いやこんな風かな? + (NSString*) stringWithString:(NSString*)s { return [s autorelease]; }
あれなんか違いそう
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
へー [NSString stringWithString:@"hoge"] も autorelease されないんだな。 他の[NSString stringWith〜]はautoreleaseされるのに。 奥が深いというか、変態的というか。 黒魔術の一端を垣間見た気がした。
されないってなんだよ。release に意味がないだけ
あぁ定数だから、関係ないのか。
定数はとにかく使いまわされるっていう事だな。
つうことはあれか、ソース内に@"〜"の記述が増えれば増えるほど それが一時的な用途であったにせよ、メモリを圧迫するってことか。
でもリードオンリのページに置かれてプロセス間で共有されるだろうから、 同時にいくつも起動するプログラムなら節約になりそう。
それは文字列の内容が同じ場合でそ
>>97 あぁつうことは、多少@"〜"が多かろうが少なかろうが、
その領域の容量は予め決まっているから、メモリ的には
あまり関係ないっつうことか。
文字列定数をまとめるのって実行時にやってたのかよ・・・
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; のように振る舞うのもこれのおかげ。
なるほど、NSString の中身は変更されようがないから、コピーを作る必要がないってことか。
Constant CFString(=NSString)はかなり前からコンパイル時にgccがCFStringの構造を
直接展開する様になった。アセンブリリストで生成コードを見れば一目瞭然。
Constant CFStringに対してretainやreleaseはNOP扱いで何の効果も無い。
>>65 これが一番適切な答えだね。
>>97 これは化石情報
質問させてくらはい x = [[Foo alloc] init]; で init がエラーしたら、この alloc した領域はリークすると思うんですけどどうなんでしょう。
「init がエラーしたら」ってなんだよ
つまり辞任?
正規表現リテラルとか欲しいな @/hoge/ みたいな
>>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 :
デフォルトの名無しさん :2011/09/25(日) 02:54:03.01
通信を途中でキャンセルするのは、下のどの組み合わせが必要ですか? 1.同期通信 2.同期通信+GCD 3.非同期通信 4.非同期通信+GCD 1だとGUIが止まって4だと行けるのは何となく。2と3の制限がイマイチ分かりません。
事故解決しました。
まあ総当たりだと事故るよな
>>112 4.非同期にしてGCDしないと受信待ちから抜けられないでアンサー?
ライフラインお願いします。
ゲーム開発には明らかに不向きだと思うんだけど、 ocj-cを採用した商用の3Dバリバリなアクションゲームとかあったりするの? nextstepから随分と長いこと使われてるあたり保守性に優れてそうだし、 長期スパンで使い続ける趣味グラマには良さげなんだけれども
>>118 一言でゲームといっても実際にはいろいろな種類のゲームがあるよね。
Objective-Cでの開発で不利にならないゲームのジャンルなり何なりがあるんじゃないかなあと思ったり。
3DバリバリなやつなんてOpenGLなんだから、 OS側のフレームワークとのインターフェイス以外は全部CなりC++なりで書けるじゃん。
>>119 quakeとか、doomとかをイメージしてまふ>3Dバリバリなアクションゲーム
画像処理系のプロプライエタリィなものは割とある気がするので、そういうのには向いてるのかと
>>120 そりゃま、そうなんだが
obj-cの特性を十分に使って開発されたソフトウェアの実績あるのかが気になったので
決して言い過ぎではないと思うから言うけど、
>>121 >obj-cの特性を十分に使って開発されたソフトウェアの実績あるのか
んなモンは無い
Appleの製品じゃね?
>>121 そのObjective-Cの特性って、例えばどんなのを想定してるの?
>>124 c++よりも動的な性質を持ったオブジェクト指向とか
特徴的といえば、(id)とかだけど、こういった独特の仕組みつかうことで開発効率あがったりするのかなと
obj-c自体にはあんまり関係なさそうだけどgcdとか
idが特徴的って…あんま理解してなさそうだな。
ああ、まったく理解してないぜ。ただの計算機歴史のミーハーだし ネット上をいくら見回したって、smalltalk由来のオブジェクト指向以上の情報が見当たらのだもん appleのプログラマが、ひょっこりとこのスレ見てるなんて奇跡でもおこらないかな
世界初のWebブラウザーとWebObjectsをじっくり調べてごらん。
Webブラウザの話は知ってるよ。知ってるわよ、そのぐらい。馬鹿にしないでくれる?っと。 奇遇にもちょうどWebObjectの記事を見ていたところw javaで書き直されてるのね。不遇な子ですこと>obj-c
>>125 それで、「動的」だと、なぜ開発効率のアップに繋がるんだ?
その話題に持っていきたいなら隔離スレで頼む 煽りでなく、有益な流れになった試しがないw
仕様の固まっていない未知のソフトウェアを書く上では型指定されていない方が作りやすかった 当時のレガシーなc++の型システムでは、プログラムの修正がほぼ不可能だったのだと妄想中 単にcとobjective-cしかなかったような気もするが。 でも、あの時代ってSTLもないよね?そんな理由でNSArrayとかが使いやすかったんじゃないの
>>131 あまり、その話題に持って行くつもりもなかったのだが、
でも、今回の話って、結局そういうレベルの話なのだろう。
まああそこに落ち着いちゃうのかも知れないけど、落ち着いた先は泥沼なのよね
Objective-CのObjective-はCの敷居を限り無く下げただけだからCと同じようなもんだと思えばよろし 実際コアな部分は殆どCで書かれてる
>>132 まさにその罠にはまったのがAPIをC++でやったBeOSだったと記憶してる
delegateパターンはid型が便利。 OBJ-Cのメリットは、ちゃんと書くとコメントがいらないことだと思う。
cとc++ => 完全に別物 cobj-c => マクロのっけただけ って認識であってる?
だいたい合ってナイ
極端な例えをする人は「そういうことにしたいんだろうな」としか思えん。 違うと言って「じゃあどう違うの?」「結局マクロみたいなものでやってるってことでしょ?」とか言いそうだし。
いいえ、事実です。
まあでもobjcはランタイムの方が本体で、 C言語に対する拡張はそれを便利に使えるようにするマクロ集的なところはあると思う。 C→C++とくらべると、なじんでないと言うか、異質感丸出しというか。ESQL/Cっぽい。
C++もObjective-Cも 最初の実装はプリプロセッサだったからマクロっぽく見えるんじゃね?
╭━━━╮┏┓┏━━━╮┈┈┈◤┈┈ ┃╭━╮┃┃┃┃╭━╮┃┈◢◣◢◣┈ ┃╰━╯╯┃┃┃╰━╯┃┈▉▉▉▋┈ ┃╭━╮╮┃┃┃┏━━╯┈◥▉▉◤┈ ┗┛┈┗┛┗┛┗┛Ⓢⓣⓔⓥⓔ_Ⓙⓞⓑⓢ ╭━━━━━━━━━━━━╮ ┃▉▉▉▉▉▉▉▉▉▉▉▉┃ ┃▉┏━━━━━━━━┓▉┃ ┃▉┃ⓉⓗⓐⓝⓚⓎⓞⓤ┃▉┃ ┃▉┗━━━━━━━━┛▉┃ ┃▉▉▉▉▉▉▉▉▉▉▉▉┃ ╰━━━━┳━━┳━━━━╯ ▁▁▁▁╭╯▁▁╰╮▁▁▁▁ ╱▔▔▔▔▔▔▔▔▔╲ ╭╮ ▔▔▔▔▔▔▔▔▔▔▔ ╰╯ ずれるかな?
ずれるかなじゃねーよ、ずれまくってるじゃねーか! 納品する前にちゃんとテストしろよ、ボケが! あと、コピペできねーぞ。どうなってんだ!
そういえば、Jobsが目をつけなかったらobjcは今頃博物館行きだったかもなあ。
148 :
デフォルトの名無しさん :2011/10/08(土) 12:13:33.90
iPhoneアプリで棒グラフを表示したいのですが、やり方が分かりません。 s7graphviewを使ってみましたが、イメージしているものと違っていて別のものを捜しています。 core-plot試しましたが、バイナリリンクの仕方が分からず挫折orz (そもそもcore-plotでできるのか?) JavaのJFreeChartの棒グラフのように表示できるものを捜しています。 Mac+Xcode4.1触り始めて一週間の素人です。 ご存知の方いたら教えてください。よろしくお願いします。
>>147 そしてiPhoneデベロッパーたちはDylanを使っているのだな。
NewtonScriptかも?
AA用のフォントとか知るかよ。WindowsのIEで検証しろよ。
このスレでWinIE前提を唱えるとはかなりのツワモノだなw
AAってそもそもそういうもんだろ 〓 ウィキペディアより 〓 プロポーショナルフォントのアスキーアート Internet Explorer5.0での表示を基準としたMS Pゴシック16ピクセル(12ポイント)、行間2ドットを標準として作られている。 数行?十数行であることが多いが、巨大なものでは50行に達する場合もある。
そもそも
>>154 にはこれもズレて見えるからどうしようもない。
___________________________________
| /;;:: \ニ..|' | |: /; イЖフ|:/:::,r'::,r''| ,!゙ -'' |
|, ,/,: -;;;;;;;;;;;;;;;;;;;;;: | | |; :;;: : : 〈;;::丶ニフ |::,、/:,,===、 .,===,. |
|,i_, -ー───ァ|==、、_ ,__,,,,..、、|=ェ;、 ,,,,,, ,,,,,, | :;;:/ , 、 |/ / .r;;;;;ヾ_r;;;; 、 .|
|t'i-、_,},}ノ ,,,:-;;彡-|_ィェァ了 (ェoヮ_ |ェヮ :) f' _-ェェ‐|,,ノ 〉 |::/ ̄ヾ;;;;ノ l,ヾ;;;ノ, |
|. r;;/,;;;;;;^'''ィ_。 ュ、 | ´!| |!` | ´.::;i, i. `'' ̄|爪 ヽ ;| ゞ / |
|i'"~ ''''':;;、,,  ̄ . | /u__,ゝ | ,イ;:' l |ノ 丶ヘ_冫ノ ,|. `トェェェェィ ./ |
|.'ー─^ー'_ ;; .| / _二' _、〉.. |/゙'''=-='''´ ヽ,...| | | ヽ |、 . \二二/./ .|
|'ニニニニヽ_彡、,,| ´  ̄ ` |'~===' '==='' .|.._,:ν⌒Y⌒ヽ、 ..::| 'ヽ  ̄ /ー- |
|___ /.::|゙ヽゝ、 , ノ | `::=====::" |.Kェエエェエェ-冫::::| \___/,: .:::|
|;;''''''''''''':;丶_/,,::::|;;;;; ヽー --''" , | .,i, |,. ヽ、___, ノ | ゙''''- 、、 '、_ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>153 ヒラギノじゃんw
なにがAAフォントだ 捏造すんなw
>>149 それはそれで面白かったかもね。
動的な言語好きだわ。
メイリオ(笑)だとズレるんかもね
なんなんだこのヘンタイ構文は これをエレガントとか言ってる奴は頭腐ってる
>>164 そんなことより聞いてくれよ
いま屁こいたら身が出たんだが
で?
エレガントって言ってる奴いるのかな v1の二つの言語がしれっと同居してる様は面白いなとは思ったけどw
しかし、Objective-Cってほんと、エレガントだよなぁ。
Smalltalk知ってればそれほど違和感無いでしょ。 Objective-C++でSTLとAppKit混ぜたり、SSE使うのにintrinsic functionも 使うから、メッセージ構文如き何でもない。
懐が広いというのかなんなのか まあ変態言語なのは間違いないんじゃね
NeXTとその後継のMacでしかまともに採用されなかった時点で 世のCプログラマがどのように見てたかわかるというもの
まあ当時はこれしかなかったっていう感じなんだろうな。
C++は汚いからな Objective Cは動的な所が敬遠されたんだよな 今では逆に利点だけどさ もっと早くにgc導入すべきだったよな
Objective-CのGCってJavaや.NETみたいに透過的に使用できるのか?
できないと思っていい
>>174 Collectorが関知するのはObjective-CとCoreFoundationのobjectだけ。
AppleはコンパイラによるAutomatic Reference Countingを主力に考えているから、
GCは既に廃止方向
GCはもう廃止方向なんだ。短い寿命だったな。
Objective-Cを拡張していくよりまったく新しい言語考えたほうがいいと思うけどな まあAppleに任せると謎センスでObjective-C以上にわけのわからない言語に仕上がりそうだけどw
Dylanがあるじゃないw
Dylanなんてアップル自身もさじを投げた糞言語だろw
早すぎただけだよ。今なら逝ける。
Dylanもヘンタイだから広まらないだろうな せめてC言語やってればすぐにマスターできますくらいのものでないと辛い
また一人、業界の大御所が世を去ったか… 黙祷
言語だけ良くてもライブラリがしっかりしてなければ広まらないよ
ブロック構文便利だけど、Objective-Cと混ざるとますますキモチワルイ。インデント的に。
C#と.NET Frameworkは偉大
デニス・リッチーなんて一般的には過去の人扱いだしな
どっちかといえばカーニハンの方に影響を受けてる気がする。
go はどうなるんだろ
Smalltalkライクの記述方法をCライクに変更するだけでだいぶ見やすくなると思う
記述方法はpascalライクにした方がコンパイル速いんじゃないの?
なんで?
シンタックスカラーリングが当たり前のご時世に そんな所で速度稼ごうとか思わんだろ 素直に分散コンパイル環境にする
言語のせいじゃないだろ。ジョブズがC++選択してもMFCみたいなうんこにはならなかっただろうな。
まあ当時C++は選択しようがないけどな。
>>197 KT7の頃のMacAppやCWの方が現在のMFCより何倍もマシだからな
つかMFCって進化してるのか?
文字列とかコンテナ類がテンプレートベースになってATLと共用になったくらいじゃない?
やっぱMFCは進化の袋小路か ObjCも色々変わって大変だけど 進化しないよりはマシだよな
ST風はわかりやすいと思うけど @なんちゃらはわかりにくいな
普通にtabでインデントできる方が色々とありがたい。
>>202 >>NSFileManager.defaultManager.createFileAtPath_contents_attributes(p, c, a)
これは嫌だw今のでいいよ
性格の異なる複数の言語の構文が同居してる時点で気持ち悪い 流行らなかった理由はそこにあるんだろうね
それぞれの言語がもつ膨大な資産をほとんどシームレスに使用できるなんて、 素晴らしいじゃないか。それに比べたら見た目の気持ち悪さなど些細なことだ。
さすがにそれは苦しいw
まあ俺が知る言語の中じゃヘンタイ度はピカイチ でもそれがカッコいい
えー、Pythonよりもー? ヘンタイなのー?
Pythonはインデント以外には変態要素ない気がするが
__class__
もともとSmalltalk自体ヘンタイだからなw
そりゃタイヘンだ
変体を重ねて美しくなるのさ
メソッドを、いちいち [ ] で囲むのは、最初は面倒だと思ったけど、 だんだん人のソースを読むようになったら、 ・[xxx yyy] だとメソッド ・xxx.yyy だとプロパティ で、これは意外と見やすい(わかりやすい)かな、と思うようになった。
[ ]はともかく、ラベル付き引数のおかげで読みやすさは一番だと思う
Objective-C++でC++のクラスは扱えるけどC++でObjective-Cのクラスは扱えないのが辛い だから基本的にクラスはC++で書いてる 正確にはCでも使えるようにCで書いたソースをC++のクラスでラップしてる Objective-Cのクラスを扱うのはMacのAPIを利用する時だけ
そんなことしたら、NSArrayやNSDictionaryで使えないじゃん
自分で書いたコードをマック以外の環境でも必要とされるっての? ちょっと羨ましいかもw
OpenGL使ったゲーム系はAndroidでも共有できるしね。
普通はコアな部分は極力プラットフォームに依存しないようにするな。
頓智.com の人が言っていたけど、セカイカメラはほとんど C で書いたので、 iphoneアプリから Android に移植するときに、すごく楽だったといっていた (Objective-C への依存を極力なくした)
環境に依存する必要のない部分で依存させるようなコードを書く奴はど素人だけでしょ
GPSとか、加速度センサとか、UI回りとか、Objective-Cに依存しなけりゃならん部分は結構あると思うんだが。
APIを組み合わせるだけのアプリ開発してるならそうかも
フルスクラッチで全部手作りかよ
Cだって依存する環境だけどな・・・
環境に依存する必要のない部分で依存させるようなコード って例えばどういうコードなんだ?
俺は独自の組込用RDBMSはCで書いてる WinのアプリもMacのアプリも同じものを使ってる
>>230 ありがちなのは、MVCのMの部分とか。
例えば?って聞いてるのに、抽象的な回答する奴にはイラっとする。
>>231 ディスクI/O部分は、POSIX使ってるの?
むしろ例えばなんて聞いてるような奴が開発やってること自体 理解できない俺はおかしいのか?
メタファの使用は開発現場ではごく普通だろ
例えばでMVCのM データベース自作してるやつがいる 知らなくても流れみればわかる話だろ
>>234 依存部分と非依存部分をきっちり分けて、
依存部分は取り替えられるようなつくりにしとけばいいんだよ。
MVCのMとデータベースは直接的な関係はないじゃん? ORMの話か?
>>238 POSIXは非依存部分と考えていいの?
まあ必要性がわからなかったり、そもそも必要がない人は、ガチガチに依存して書いておけばいいんじゃね? 書き捨てならその方が手間はかからないし。
>>240 いやだから、ファイルI/Oのモジュールを差し替えられるようにしとけば、
POSIX使うのとかWin32使うのとか、そこだけ作って差し替えれば
よそに持っていった時に最適な方法を使えるじゃん。
POSIXなら概ね非依存だろうけど、最適かどうかはまた別だよね。
POSIXならWindowsでもMacでもUnixでも使えるじゃん。 いちいちWin32やCocoaで使えるインターフェース設計してそれ用のラッパ作るのって そういうライブラリを作るのが目的とかじゃなければ、よっぽど時間と工数に恵まれた 環境じゃなきゃ現実的じゃないべ。
何? 依存性を考慮して作ったから移植が簡単だと?それは良かった。 先月リリースしたiPhoneアプリのAndroid版を今月中にリリースしてくれ。 言語はたしか、Javaだったな。 じゃ、宜しくっ!
しかしRDBMSを独自に組めるとかどんだけ頭いいんだ 数十万ステップオーダーだろ
>>243 まあそうだけど、ちりばめないでまとめておくのは良い習慣でしょ。
たいがいは、オプソのDBFileで十分だろ。 もちっと性能が求められるなら、いちいち作るよりMySQLの商用ライセンスでも買った方が時間も手間もかからない。
俺はアプリに組み込む目的には専らsqlite使ってるな。 C#で書いたツールで作ったデータをiOSで使うみたいな事もできて便利。
iPhoneの標準DBもSQLiteだしな。
>>244 いまは Java を使わなくても C で Androidアプリ作れるよ。
もちろんコンパイル時にターゲットは固定されるけど、
現状では ARM がほとんどなので、そこに目をつぶれるなら。
もちろん、ビューの切り替え等は Java の SDK の API 使ったほうが楽なので、
C で書けるからと言って楽なわけではない。
iphone と Android で C で共有というのは、
GUI ではなくロジックの部分を、なるべく C で書いたら、楽に移植できたということでしょ。
そりゃそうだろ
プログラマ的思考の奴とシステムエンジニア的思考の奴が言い争ってる感じだな
それはちょっと違うな
わりとboostが普通につかえてるな
むしろ使えないとおかしくね?
なんで?
コンパイラはGCCなんだからCやC++同様に使えて当たり前って話だろ
>>258 既にコンパイラとしてのGCCは捨てた。
まだ移行中ってとこだべ
261 :
デフォルトの名無しさん :2011/10/24(月) 21:39:25.32
Push通知機能のアプリを受託で実装しています。 自分の登録しているディベロッパーでApp IDsを作成し、 Apple Push Notification serviceを有効にする等の作業で作成した証明書では とりあえずpush機能を実装できました。 ただお客様の登録しているディベロッパー上で証明書を作成する作業が、 自分のMac上でできるものなのか良くわかりません。 もしPush通知アプリを実装したことのある方、 このあたりのノウハウを教えて頂けたら幸いです。
>>261 まるでObjC関係ないし、そもそもどうやってリリースするつもりでいたんだよ
>>261 新Mac板のiphone開発スレで聞いたほうがいいと思う
C既習を前提としないObjective-Cの入門サイトor書籍ってないの? Objective-Cはネット探しても他のメジャーな奴に比べてまだまだ少なくて困る
正直Cの知識が無いやつにObjective-Cを触って欲しくない
欲しくないっていうか無理でしょ普通に考えて。
評判いいC入門と評判いいobj-c本に分けて当たったほうが無駄なく済むと思う
Cを知らずにいきなりObjective-Cをやる奴は、前戯無しでいきなり挿入するようんなもんだろ。
こないだのテレビ番組じゃド素人が簡単なアプリ作れてたみたいだけど。
でも、今Macの上で取りあえずC勉強しろって言われても地味すぎてつまらんだろ。 ある程度成果物ができてこないとモチベーションが続かない。仕事なら別だが。
んー、やっぱしCからやったほうがいいの? いろんな言語を使うならCをやっといた方がスムーズに新しい言語を学べるかもしれんが、 そうじゃないしCを学ぶのってただの時間の無駄にしか思えなくてあんまCをやる気にならない。 どうせCマスターしてもObjective-Cと違う所がたくさん出てくるんでしょ?
目的によるけど、iPhone のプログラム作れるようになりたいとかなら、初心者向けの本いっぱい出てるから、 ここでグダグダ言ってないで、さっさと本屋さん行って良さげな本を買ってきて、実際に手を動かすのが一番。
まあ明確な目的があるなら、とにかく始めるのが一番だよね。
行き詰まったら、その時に必要な知識を仕入れればいいし。
>>274 Objective-CはC+αなんだから、少しも無駄にはならないし、避けては通れないと思うよ。
んだな。詰まったらC本買う、くらいの気構えでいんじゃね
やってみりゃ、すぐ
>>264 の言ってることがどういう意味なのか分かる
まずはK&Rを読み込んでから話だ Cもできないプログラム言語の初学者に ObjCはいまいちだと思うが
ぐぬぬ、Cは避けれそうにもないか・・・? やりたいこと(作りたいもの)はいろいろ明確にあるんだけどねー。 じゃ、Cからやってきますわ
>>280 >やりたいこと(作りたいもの)はいろいろ明確にあるんだけどねー。
これが色々明確にあるひとは作る側に回る必要は無いと思うよ。
作れる人はいくらでも集められるし、これがある人は自分で作ってる暇はすぐになくなる。
K&Rなんて読んだ奴は例外なく糞コード吐くからやめてくれ
今時Cからやる必要なんて皆無。というか時間の無駄。
>>283 だから、Cもやった事無い人は何からはじめればいいんでしょう?って質問がそもそもなんで、
是非それに答えてやってください。参考図書とか参考サイトとか。
Cなんか無理にやらなくていいよ、斜め読み程度で 書店で数冊MacなりiPhoneの本買って、さっさと作り始める方が早い
>>284 とりあえず始めるほうが早く覚えられる
一見は百聞にしかずと言うだろ
とりあえず
>>285 的な感じで始めてみて、しばらくしたら壁にぶつかるから、
そしたらそれを乗り越えられそうな本なりサイトなりを探して読む。以降繰り返し。
実際に行き詰ってみれば、何が足りないのかわかるでしょ。
そしたらその都度知識を仕入れればいいじゃん。
>>282 ちゃんと読んだことねえだろ
カーニハンはマジ導師
ま、どっちにしろCはいずれ避けて通れないし
Smalltalkも避けれないがな
K&Rを本当の意味で理解できる奴なんて一握りだからな 下手に齧った奴は糞コードを吐くだけなので薦めない方がいい
そもそもK&Rは初心者向けのものじゃないよ
K&Rは面白いからな 薦めたくなるんだよ
Cを知らんと、なぜオブジェクト変数の宣言に、*がひっついてるのかがピンとこないだろうな。 あと、配列とか、structとか、enumとか、NULLって何?とか、マクロの使い方とか、制御文 や四則演算とか、Core〜系APIの呼び出しとか、Cの基本知識は結構大事だと思うよ。 Objective-C++にまで手を出すとなったら、C++の前提として、Cの知識は必須だし。
さすがにそこまで知らないレベルは、そもそもどんな言語でもまともに扱えないだろうし、 並の知能があれば調べればすぐに分かる。 「Objective-CをやるのにCから始めなければならない」かどうかという話を 「Objective-CをやるのにCの知識は不要」とまで極論付けるのは、どういう思考回路なのか。
初学の趣味プログラマなら最初は興味が持続するのが大事だしな ある程度わかりだしたらCとかSTとかの重要性とか 面白さがわかるんじゃなあかな
だからといって害になりかねない初心者本はオススメ出来ないな
初心者にとってCでやっかいなのは、たぶんポインタがらみだよね。 で、objcをやるにしても、ポインタがらみは普通にわかってないと困るんじゃないの?
まあ必要性を感じたところで勉強すればいいわけだけど。
NSString *str; とかの * はオブジェクトを表すお約束だと思えばポインタ分からなくても大丈夫だったりするんじゃないかな。 (で、error:(NSError **)error ではまる。)
たまに、Appleのソースでも、->演算子をみかけたりするけどな。
他人が書いたコードを読めないっていうのは、勉強する上でも圧倒的に不利だね。
rubyCocoaとかのLLバインドが初学者向けに正式に定着すりゃ良いんだけどねえ
>>298 >(で、error:(NSError **)error ではまる。)
まさに、それどういう意味なのかな?
普通にオブジェクトが参照で 変数に入れれる言語が多いしね 扱い違うのは混乱するのかね STよりにF-Scriptみたいなの欲しいね
>>293 そういう話をしているのではなくて
「プログラミング未経験者なんだけどそういう人にお勧めの本はない?」
に対して「Cの入門書やってろ!」から入るからおかしな事になってるんだろう、
まあ、そういう本でオススメできるのが無いと言うのが一番問題なんだけど。
C++だってCの知識は必要だけどだからといっても未経験者がC++を学ぶ為にいきなり読み始める
事を前提とした本はあるだろ。そうでないと目的に到達する前に力つきるよ。
例えば、K&Rが良いと聞いてこれを読み始めてXcodeでのhello world!にたどりつけない人もいる気がする。
お前何十年も修行して達人にでもなるのを待ってから戦場に出るつもりか? 気の長なげェ話だな ベルセルク 第24巻より
戦わずして勝つ…! ニートより
果報は寝て待つ。 生活保護受給者より
目的意識と行動力が強い人なら とっくに開発環境とサンプルコードダウンロードして 見よう見まねで作り始めてるさ
まともな判断力があるならiOS/Androidやるかな・・いまは
iOSで動作するAndroidってでないかなぁ。 技術的には可能だと思うけど。
仮想環境?
Wine(Win32 API over POSIX)みたいなものかな? 個人的には、逆にAndroidで動作するiOSが面白そうに思える あるいはCocoa over Windowsでもいい 技術的には可能なはず....(誰がやるん?という話は置いといて) GNUstepはWindows版もあるけど、なかなか安定していない PDA(あるいはTablet device)だと、GNUstepをベースにした mGSTEPという軽量版があって、これはSHARP Zaurs等で動く ただしXlib前提なので、それがAndroid移植のネックになるかも
bsd系のOSにはlinuxのエミュレーションがあったりするから、やれば出来そうだね。
Android上で動作するiOSって難しいと思うなぁ。 エミュレータレベルなら出来そうだけど。 iOS上のAndroidは比較的簡単じゃね? Android端末はLinuxにAndroidスタックをポーティングしてる。 iOSにもポーティングできるだろ。 しかもオープンソースだし。
技術的には可能でもアポーが許可しないよ。Adobe Flashと同じ様に。
>>314 階層化アーキテクチャという言葉を知っているかい?
AndroidがスタックしているのはLinuxカーネル上であって
(POSIX互換な)Linux API上ではない。残念ながらiOSは
クローズソースだから、外の人はカーネルIFは触れない
従って、Androidは対Linuxには移植が容易でも
iOS上への移植は技術的に困難を極める
後は仮想環境だけど、期待される性能を出すのは(おそらく)困難だろう
オープンソースだから何でもできると考えるのは浅はかな素人思考
脱獄しちゃえばJAVA走るしiDroidなんてのもあるから光明ありそうだけど、Appleのお墨付きは絶望的だろうねえ
Androidはとっととx86出せと。ポーティングはあるが、3系がなくて片手落ちだ。
>>316 bsd系のOSってlinuxのバイナリをそのまま動かすための機能が入ってるのが多いけど、
それはlinuxのカーネルインターフェイスをエミュレートするものだよ。
だから同じような方式で出来そうなもんだけどね。
>>312 >あるいはCocoa over Windowsでもいい
YellowBox for Windows?
わりと安定して動いてたんだけどね。まあ、方向性が違っちゃったって事で。
>>319 階層化アーキテクチャという言葉を知っていますか?
BSDのLinuxエミュレーションはBSDカーネルIFが公開されていて、
しかもBSDカーネルのコード自身もオープンだから実現できた技術
どちらもUNIX由来のカーネルIFでカーネル空間内で実行されるから、
一般的な用途ではまず支障のない性能(低オーバヘッド)を達成できた
カーネルIFが公開されていないiOSとは、まったく事情が異なりますヨ
>>321 iOSのカーネルってXNUじゃないの?
いや、自分はiOSハッカーとかそういう類の人じゃないからよくしらないけどね。 JBの仕掛けを作ってる人たちはその気になればそれなりにやれるんじゃないのかと思って。
>>321 AndroidがLinuxカーネルにポーティングされてるからって、iOSでもカーネルにポーティングしなきゃならんわけではなかろ?
Androidの下側のインターフェイスは公開されてるんだから、階層が違っても可能だと思うがなぁ。
確かにパフォーマンスは期待できないかもしれないが。
「階層化アーキテクチャという言葉を知っていますか?」 と言っておけば取り敢えず何か言った気になれるということを学習した
試してないけどin-the-boxていう DalvikのiOSポートがあるね
>>326 インストールしてみた
デモの通りにjavaのclassをdxしたjarが動いた
Hello Worldなw
>>321 カーネルインターフェイスってなんだよw
Androidのアプリは基本vmで動いてるんだし
libcなどのライブラリもある
まるごとAndroidのシステムを動かす必要はないんだしな
まだ続いててワロタ
必死で反論を考えて痛んだろw
初めて見たとき、@" "とか[]とか*とかで、なんか気持ち悪い!って思いましたが。 やってみるといいですねこれ。
NetHack厨だった俺には特に違和感なかった。
>>333 > 「+ (MyGizmoClass*)sharedManager」だけ残して後は消してね。って意味でしょうか?
そういう意味だと思います。
> このシングルトンにプロパティを持たせる場合は...その場合、どうやってプロパティを初期化するんでしょうか?
で、そのプロパティの話はどこから出て来たんだ?
まあ、プロパティの初期化なら、単純にinit...メソッド書くだけだけど?
横からなんだが、 英語の方のsynchronizedが消えた理由と、 allocWithZoneでretainしているのに、copyWithZoneでしていない理由がワカラン どうでもいいと言えば、それまでなんだけどさ
プロパティってのはこのシングルトンのインタンス変数にアクセスするためのインターフェースの事です。
そのプロパティにアクセスした時の初期値を
>>333 のシングルトンのコードの場合、どこで初期化するば良いのか知りたかったのです。
シングルトンがインスタンス変数を持つ場合は
>>333 のコードの+ (id)allocWithZone:以降はいらないとなると
残った+ (MyGizmoClass*)sharedManagerの中で問題ってことですよね。
>>335 の英語版ドキュメントの方が新しいので今後はそちらを参考にしょうと思います。
>>336 シングルトンなのでコピーさせないようにしてるのでは。
そもそも、シングルトンを複数生成やコピーできないようにするコードって必要なの? プログラマが気をつければ済む話じゃない? ARC に移行したら retain や release は使えないし。 まぁ大規模プロジェクトや不特定多数に使われるライブラリなら分かるけど。 って訳で、+ sharedXXX だけ定義して使ってる。 インスタンスが必要なければクラスメソッドで済ませちゃうし。
>>336 実装が変わってるのは旧版だとアナライザちゃんが警告するんだけど?って文句が出たから
言ってみれば今のはアナライザちゃんを騙すためのごまかしが入ってる
>>338 俺もそんな感じで使ってる。趣味開発なら問題無いしな。
>>339 なるほど。納得した。
でもsynchronizedまで外していいのかね。
>>338 別のクラスの中に埋めたりした時にもシングルトンである事を保証したいような時に使うかな?
シングルトンなオブジェクトを別のオブジェクトに埋めないように気をつけるか、
埋めたオブジェクトを複数生成したりしなければ問題ないかと。
でも、これらに気をつけながら使うぐらいならわざわざシングルトンの実装はしないな。
>>341 埋めるってどうやって? C++ なら分かるけど、ObjC だとポインタで持つしかないよね? サブクラスのこと?
>>337 > プロパティってのはこのシングルトンのインタンス変数にアクセスするためのインターフェースの事です。
なんか、「プロパティ」と「インスタンス変数」と「インターフェース」の言葉の意味をどう解釈して良いのか分からないぐらい、意味不明な内容なのだが...
普通に考えると、シングルトン・オブジェクトにアクセスするインターフェースは、+ (MyGizmoClass*)sharedManagerということになると思うのだが。
>>343 また横からなんだが、
@interface Singleton : NSObject {
int value;
}
+ (id)sharedInstance;
@property int value;
@end
ならvalueプロパティが、インスタンス変数valueにアクセスするインターフェースになるんじゃ
それと今は、
NSFileManagerのように、defaultManagerとalloc-initで得られるインスタンスが異なるから、
そういうケースでalloc以降をオーバーライドすると、allocしたやつがreleaseできなくなるって話だよね?
プロパティ持たせるだけなら、alloc以降もオーバーライドしないといかんし。
>>344 そういうことなら、結局のところ、シングルトンのプロパティはinit...メソッドの中で初期化すればいい。
という話でいいのかな?
>>345 alloc-initでshared...と同じインスタンスを返す仕様だと、
initをオーバーライドしないと、alloc-initで取得した場合に、
初期化済みのインスタンスに再度親クラスのinitを呼ぶことになるから、
それが嫌なら、何らかの対策は必要になるんじゃないかな。
NSObjectのinitなら単にself返すだけとドキュメントに書いてあるけどね。
347 :
700 :2011/11/16(水) 10:32:58.96
これからiPhone/iPodのアプリの開発をはじめたいんだけど、 端末は第三世代と第四世代の2つ(どっちかをiPhone、もう片方がiPod Touch) があればいいのかな?
スレ違いだから良く分からんが全部持っとけばいいんじゃね? ObjCがどれでも使えるのは間違いないよ
iPhoneアプリのInstagramみたいにiOS5のTwitter機能使いつつ投稿クライアント名を任意にしたいんだけど、どうすればいいの?教えてエロい人
勉強してみるかな
UIView.hにある以下は何を表しているのでしょうか? @interfaceは class : supper class という書き方しか知らないのですが。 @interface UIView(UIViewGeometry)
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 :2011/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
autoreleasepoolやめて手で書けば
357 :
353 :2011/11/23(水) 17:38:55.56
>>356 ありがとうございます。
そうなんですか・・・
MaxでのXCodeでもそうなんですか?
ARCの話ともちょっと違うかも
360 :
353 :2011/11/23(水) 18:31:18.30
gccを使わず、clangにすればいい。
winでgnu stepでgccとかって なんかの修行?
>>362 今手元にMacが無いんですが、今後objective-cやる予定があって、
その練習です。なのでこの環境でアプリ作る予定ではないです。
>>361 clangでやったらヘッダーが無いとか色々怒られて面倒になってしまいました
勉強なら仮想環境(VMWare)上でやればいい
>>364 う〜んどうやらグレーな感じですし、今回はやめておきます。
プログラミングで遊ぶのにMacいいよ いい機会だし一台手に入れてみては
>>366 お金たまったら手に入れたいな〜と妄想中ですわぁ
Mac Mini買っとき
miniは、なかなかよい
色の配列を作成したい。 Color list[] = { "ffffff", "ffcccc" }; みたいなことをしたい。
共通の定数を定義したcommon.hを作成し、 他の複数のファイルから#importするとリンクエラーになる。 回避策ない?
なにをどんな風に書いてんの?
インポートは何回やってもいいはずだが、 インクルードはだめだけど
同じ定義が複数のファイルに含まれる事になってduplicate symbolとかそんな話でしょ。
extern使え
376 :
デフォルトの名無しさん :2011/11/25(金) 21:42:59.95
クラスの引数のラベルって第2引数からしかつけられないのかね? 第1引数はメソッド名がラベル扱い?
VBとかの引数ラベルとはまた別の考えの物だから
構文では単にセレクタとなってるね しかしそもそも第一引数にも:ついてる
allocみたいな:がない奴は単項セレクタで引数ではない
CもC++もObjCも慣れたらどうってことは無いな ObjCは活躍の場が限られすぎるところが問題だが
勝谷君
やってみる
質問です。 ObjCではシングルトンインスタンスは作りっぱなしのコードばかり見つかるんですが、 それはOSがお片付けしてね!って思想ですか? もちろんメモリ以外のリソースは、 それ用のメソッドを用意しなければならないですが。
シングルトンを一々解放する必要がある設計ってなによ?
>>385 他の言語だといちいち自分で解放するの?
388 :
385 :2011/12/06(火) 17:26:03.67
CやC++でヒープに確保していたシングルトンインスタンスは解放していたので。 ただ解放しないという方針でよさそうですね。 ありがとうございました。
自力リファレンスカウンタ方式なら通常運用で解放できるんじゃね? 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 とか
@imp... + (id)alloc...{ if (!sharedInstance) { ... } ... } - (void)dealloc { ... sharedInstance = nil; } ... @end 参照カウンタはNSObject任せでいいような。
391 :
385 :2011/12/06(火) 21:14:15.76
>>389-390 状況によってはこっちの挙動のがいい場合もありそうですね
ありがとうございます。
>>389 面白いなあ。キミ頭おかしいんじゃね?
自力リファレンスカウンタ(笑)
UDPプログラムを作っている時、エラーが出てきてとれません。
参考サイト
http://www.geekpage.jp/programming/macosX-network/udp.php エラーが出ているところ
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
なにか追加したらいいんでしょうか?
#include <arpa/inet.h>
>>394 ありがとうございました。それで消えました。
スレチだしエラーくらい自分で読めって感じだけどな。
ググればすぐに解決することを聞いてくる奴は無能以下だよな
文脈をみれば以下で自然。 予想以下とか、予想を含まないから。
困った、バカだ
以下でOK
402 :
デフォルトの名無しさん :2011/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];
(1) の方が良いに決まってるだろ。 > [threadString setString:[newDataArray objectAtIndex:i]]; Array から取り出した String を一々コピーしてどうする。
404 :
402 :2011/12/14(水) 11:51:41.88
>>403 ありがとうございます。
メモリに残るというのは、NSString *msg = @"hoge"; のように定数を設定した場合の話ですよね。
助かりました。
処理が要素を読むだけなら(1)の一択 >NSStringの割り当てはメモリに残り続けると何かで読んだので、 意味が分からない NSStringリテラルの話? あと、高速列挙使った方がいいかな int i = 0; // インデックスが必要なら for(NSString *threadString in newDataArray) { // なにかする i++; // インデックスが必要なら } >NSAutoreleasePoolを挟んでおけばおkですか? うん
406 :
402 :2011/12/14(水) 12:13:56.07
>意味が分からない NSStringリテラルの話? リテラルの話です。仕様の細かい話を読んで、理解しきれず変に混乱してしまったみたいです。スマソ。 >あと、高速列挙使った方がいいかな 使ってなかった。ありがとー!
plistファイルを読み込みたく、以下のように記述しました NSString *path = [[NSBundle mainBundle] pathForResource:@"hogehoge" ofType:@"plist"]; NSArray *array = [NSArray arrayWithContentsOfFile:path]; しかし、これだとerror: initializer element is not constantがでます そういう場合はどこに原因があるのでしょうか
>>407 エラーメッセージでぐぐれ。
書く内容の問題ではなく、書く場所の問題。メソッド (や関数) の中に書けば OK。
地方でシェアオフィスが成功すると信じるあなたは事業失敗に突き進むと予言しときます
412 :
デフォルトの名無しさん :2011/12/21(水) 17:21:27.29
クラスの中で変数をセットする場合って、たとえば、 name = @”hoge”; ではなく、self.name = @”hoge”; もしくは、[self setName:@”hoge”];とやるべき? publicな変数にそうしたほうがいいのは分かるけど、作法として、privateな変数にまでそうやるべきもの? privateを含む全ての変数に@property,@synthesizeを設定するのは、ちょっと面倒に感じるのだけど。
オーナーシップ GC、ARC で答えが微妙に違う KVO発動させなくていいなら割とどうでもいい
414 :
412 :2011/12/21(水) 20:20:34.18
>>413 >GC、ARC
iOS用に書いてたんだけど、ARCになるとルール全然違うのね。うへえ。
>KVO発動させなくていいなら割とどうでもいい
参考になった。ありがとう。
半端な知識でインスタンス変数に生で代入したりするとメモリリークしまくる だけだから素直にプロパティ使った方がいいと思うけどね モダンランタイムになってから自分で変数用意してやる必要無いし 手間としてはそんな変わらん
まあARC使うならあんまり気にしなくていいけど
>>411 そんなスパムにコメントしたあたくしがこっぱずかしー
穴を見つけて入れ!
419 :
デフォルトの名無しさん :2011/12/22(木) 00:18:13.73
アホな質問でごめん。以下のfuncで messageの解放がはじまるのは、forループが終わった後で、 regexpの解放がはじまるのは、funcを抜けた後という理解で合ってる? つまり、スコープ内でのautoreleaseオブジェクトの生存が保証されてるのか、ということなんだけど。 たとえばfuncをバックグラウンドで実行させている途中でメモリの解放がかかったときのために、 (まさか、いらないとは思うんだけど)関数内の頭と尻尾で手動でallocとreleaseしたほうがよいのかとか混乱中。 - (void)func:(NSArray *)sourceArray pattern:(NSString *)pattern relace:(NSString *)replace { NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error]; for(NSString *message in sourceArray) { NSString *replaced = [regexp stringByReplacingMatchesInString:message options:0 range:NSMakeRange(0,message.length) withTemplate:replace]; /* 中略 */ } }
message は retain されてないから、解放も糞もない。 regexp の解放は、func を呼び出す状況に依るだろう。
>>419 ARC かどうかで微妙に違う。ARC 無効の場合、
・message は sourceArray が retain してるものを参照してるので、
sourceArray から削除されない限り有効。
・regexp は一番内側の autorelease pool が解放されない限り有効。
自分でわざわざ autorelease pool を生成/解放しない限り、
スコープを抜けても有効。特に、return してもまだ生きてる。
ARC の場合、regexp や message などの変数はデフォルト __strong なので、
代入した時点で retain され、スコープから抜ける時に release される。
(スコープから抜けても sourceArray や autorelease pool が所有権を
持ってるので、ただちに解放される訳ではない。)
422 :
419 :2011/12/22(木) 03:15:34.82
>>420 >>421 ありがとう。もうちょっと、教えて。すまん。
>・regexp は一番内側の autorelease pool が解放されない限り有効。
つまり、メインスレッドでイベントループが進行しても、バックグランドで実行中のfuncのなかの
(regexpが登録されている)内側のautoreleaseプールが解放されることはない?
自分でわざわざautorelease poolを作成していない場合の話として。
それは、メインスレッドで解放されるプールと、regexpの登録されているプールの場所が違うからか、
それとも、スコープを抜けないとregexpのrelease処理を実行しないからなのか、どっちなんだろう?
#なんとなくメインスレッドが進行すると、1つしかないプールを空っぽにされそうなイメージがあるのだけど
早くARCに移ったほうがいい気がしてきた。
・autoreleasepoolはthread local ・main thread以外のthreadのpoolは自分でつくらないといけない
424 :
419 :2011/12/22(木) 13:52:01.64
>>423 ありがとう。ここまで教えてもらって、やっと分かってきた。
ARCを使わない場合に、サブスレッドでNSAutoreleasePoolを自分で作らないといけないのは、以下の全部?
(1)NSThread detachNewThreadSelector:@selector
(2)self performSelector:@selector
(3)GCD:dispatch_async
(4)非同期通信:NSURLConnection connectionWithRequest:request delegate:delegate
(1),(2)で、自分でプール管理しないといけないのは分かる。(3),(4)の場合、自動的にNSAutoreleasePoolを用意してくれるのかな?
質問のバックグラウンド処理は(4)の後のconnectionDidFinishLoadingでの処理なんだけど。
Objective-CでCGI書けますか?
駆けます。
ありがとうございます Hello WorldのCGIだけでも教えてください orz
int main() { printf("Hello World\n"); }
こんにちわ、はじめたばっかりでよくわからないんですが、xcode4.2で、外部ファイルはどうすればいいですか? 4.1以下はリソースフォルダの中に入れれば良いみたいですが、4.2で初めて触りだしたので、よくわかっていません。 ネット上にも情報少なく…。お願いします。
スレチ
>>424 「いけない」のは 1 だけ。
2: そもそもスレッド関係ない。-[NSObject performSelector:] は呼び出したスレッドでの実行。
performSelectorInBackground:withObject:のことをいっているのならば
(1と同様に)自分で作らないといけない。
3: GCDのqueueがプールを用意しているから、自分では作らなくてもよい。
ただし、そのプール内のオブジェクトがいつ解放されるのかは保証がないので、
オブジェクトを大量に作成する場合などには自前で用意したほうがよいこともある。
4: これもスレッドは関係ない。
NSURLConnectionはスレッドではなくRunLoopによるイベント駆動型の非同期処理。
-[NSURLConnectionDelegate connectionDidFinishLoading:]は
+[NSURLConnection connectionWithRequest:delegate:]を実行したのと同じスレッドで呼ばれる。
432 :
419 :2011/12/22(木) 21:36:40.25
>>431 >2: そもそもスレッド関係ない。-[NSObject performSelector:] は呼び出したスレッドでの実行
>+[NSURLConnection connectionWithRequest:delegate:]を実行したのと同じスレッドで呼ばれる。
このあたりが、ごっちゃになってた。
丁寧に教えてくれて、ありがとう。かなり助かった。
433 :
デフォルトの名無しさん :2011/12/24(土) 19:23:51.25
高速列挙では順番が保証されないというのを見かけて気になってるのだけど、 以下のような単純なarrayやmutableArrayでも、高速列挙で順番が狂うことがあるの? こういう場合なら順番が狂うという例を教えてもらえないかな。 NSArray *array = [NSArray arrayWithObjects: @”One”, @”Two”, @”Three”, @”Four”, nil]; for(NSString *string in array) { NSLog(@"%@", string); } NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:array]; [mutableArray addObject:@”Five”]; for(NSString *string in multableArray) { NSLog(@”%@”, string); }
> 高速列挙では順番が保証されないというのを見かけて 何処で見かけたの?
435 :
433 :2011/12/24(土) 20:19:16.08
配列なら保証されてると思うけど、どうなんだろね。
http://developer.apple.com/jp/devcenter/ios/library/documentation/ObjC.pdf 「明確な順序を持つコレクションや列挙子(配列から派生したNSArrayインスタンスやNSEnumerator インスタンス)の場合、
列挙はその順序に従って行われるため、必要な場合は反復をカウントする だけでコレクション内を指す正しいインデックスが得られます。」
「For collections or enumerators that have a well-defined order―such as NSArray or NSEnumerator instance derived from an array―
the enumeration proceeds in that order, so simply counting iterations will give you the proper index into the collection if you need it.」
詳解Objective-C2.0の2刷にも「配列の場合は先頭から順番」と書いてあるけど、
翻訳がミスってるのか、実装がおかしいか、何か勘違いがあるのか、最近変わったのかも。
437 :
436 :2011/12/24(土) 21:10:34.19
そのサイトのコードを見ると for (UIScrollView *scrollView in self.scrollView.subviews) { と UIScrollView *scrollView = [self.scrollViews objectAtIndex:index]; だから、 高速列挙はsubviewsのviewをとってて、 もう一つはscrollViewsのオブジェクトを取得してるから、サイトに載せる時に書き間違えてなければ 高速列挙の方は for (UIScrollView *scrollView in self.scrollViews) { じゃないのかな。 subViewsがscrollViewsと同じかどうかはこれだけじゃわからないけど。
画面遷移するときのアニメーションで、『右から左方向にスライド』するプロパティが無いか探しています。 どこかのサンプルから拾ってきた画面遷移するメソッドなんですけど、 ソースに、いろいろプロパティを設定してみたのですが、その思うようなプロパティが見つからないです。 -(IBAction)showTableLight{ //使う変数 TLLightViewController *controller = [[TLLightViewController alloc] initWithNibName:@"TLLightViewController" bundle:nil]; //プロパティ色々 //controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; //横回転フリップ //controller.modalTransitionStyle = UIModalTransitionStylePartialCurl; //ページ送り //controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; //じわじわとみえてくる表示 //controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical; //下から上方向にスライド表示 //controller.modalPresentationStyle = UIModalPresentationCurrentContext; //下から上方向にスライド表示 //controller.modalPresentationStyle = UIModalPresentationFormSheet; //下から上方向にポップアップでスライド表示 //controller.modalPresentationStyle = UIModalPresentationFullScreen; //下から上方向にスライド表示(画面全体) //controller.modalPresentationStyle = UIModalPresentationPageSheet; //下から上方向にスライド表示(ページ全体) //画面遷移 [self presentModalViewController:controller animated:YES]; //解放 //[controller release]; //xcode3迄 controller = nil; }
スレチ
何でWindowsに開発環境を用意してくれないのですか? QuickTimeというksみたいなものはWindowsにあるのに何でですか?
>>443 MSがVisualStudio for Mac出してWindowsPhoneの開発ができるようになったら俺も賛同するよ
>>445 ここに書くんだから「Appleは」なわけがなでしょ
こんな所にそんなこと書いても何の意味もないじゃん
まさか >443 はそこまで馬鹿じゃないでしょ?
2005くらいのVSはけっこう好きだな。 最近のはVSもXcodeも同じくらいイライラする。
>>449 要点だけにすると
>443 スレ違いだボケ
ocの開発環境の話題なのにスレ違いでもないと思うけど
ここは言語のみでしょ。
453 :
デフォルトの名無しさん :2011/12/28(水) 12:00:48.56
Cocoa等のフレームワークの話ならまだしも開発環境の話はすれ違いでしょう フレームを望んでるなら釣れやすい新板の、Xcodeスレがあるし
Cocoaどこの細道じゃ
知らん
456 :
デフォルトの名無しさん :2011/12/30(金) 22:03:06.26
perlみたいに、NSString *strのなかに直接文字列を放り込む方法ってない? ダブルクオートを逐一変換するのは面倒なので。 $str =<<EOF; [生文字列] EOF NSString *str = "[ダブルクオートを変換した文字列]";
その内 C++11 に導入された raw string リテラルも使えるようになるんじゃ
459 :
456 :2011/12/31(土) 00:51:50.38
MuchaSukebeObject Class reference MSPanty Class MSObject / MSGoods / MSPanty - Example - MSPanty *panty = [[MSPanty alloc]initWithPantyStyle:bikiniStyle]; panty.color = [MSColor romancePinkColor ]; panty.material = [MSMaterial materialWithsatin:0.6 silk:nil cotton:nil nylon:0.2 polyester 0.2 mesh:NO]; panty.size = smallSize; panty.smell = [MSSmell lightCheeseSmell]; panty.stainOfCrotch = vaginalDischargeWithBrown; [self.view addSubview:panty];
viewかよ!!
!
>>461 あああ悔しー
CもObjective-Cも読めないー
面白さを理解したいー
こんな風にツッコミたいー
>>460 こういう例とかセンスで本とかチュートリアル出してくれたら
習得が早いんじゃないかと真剣に思った。
キモイ
466 :
デフォルトの名無しさん :2012/01/01(日) 22:46:34.28
一般論として、(1)よりもゾーンを使う(2)のほうが動作は速い? 速度が速くなるのは、インスタンスのメンバ変数を頻繁に呼び出す場合? (1)receivedData = [[NSMutableData alloc] init]; commentArray = [[NSMutableArray alloc] init]; (2)receivedData = [[NSMutableData allocWithZone:[self zone]] init]; commentArray = [[NSMutableArray allocWithZone:[self zone]] init];
>>466 ゾーンなんて使ったことないし、普通は使う必要ないと思ってる。
NSCreateZone()使ってゾーンを確保してページングが起こっても関連があるもの全部がオンメモリになるようにインスタンスを的確に確保すれば速くなるかもね
469 :
466 :2012/01/02(月) 05:16:50.75
470 :
デフォルトの名無しさん :2012/01/03(火) 04:41:25.22
NSRegularExpressionOptionsに NSRegularExpressionCaseInsensitive, NSRegularExpressionDotMatchesLineSeparators の両方を設定するは、どうやったらできる? NSRegularExpressionOptions options = NSRegularExpressionCaseInsensitive; NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:regexString options:options error:&error];
論理和
まあ、いまなら普通に足してもいいけど
>>470 NSRegularExpressionOptions options = NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators;
>>471 論理和って普通 || を指すのでは? wikipedia によれば | は「ビット単位OR」らしい。
>>472 それは嫌。
>>473 ORは論理和。ビット幅など関係ない。普通は|を意味するが||も含むと思う。
ただ条件式での優先度が違うでしょ。
>typedef NSUInteger NSMatchingOptions;
まあ足してもいいな。
>>474 || にはビット幅は関係ないけど、| には関係あるよ。
で、この手の演算には + や - ではなく、ちゃんと | や & を使うべき。
A | B で A と B の同じビットが立ってたら + だと違う結果になるから。
>>474 >>typedef NSUInteger NSMatchingOptions;
>まあ足してもいいな。
今なら普通に足してもいいってのはちゃんとオプションの今の値を見て書いたんだよ。
型は関係ない
そのうち普通に足すとダメになるかもだし
478 :
470 :2012/01/03(火) 16:59:34.26
>471-477 ありがとう。
UIlabelのpositionの取得方法ってありますか?
>>479 positionってframeとかboundsの事か?
プロパティで(もちろんメッセージ送っても)取れるけどスレが微妙に違うな。
>>480 ,481
レスありがとうございます。
移動してみます。
この言語仕様が汚いから変えて欲しいな シンプルにたのむぜ
字面は汚いと思う
了解で〜す
>>483 むしろ、純粋にCをOOP化してる言語な気がするけどなぁ
C++と比較すればなんて綺麗な言語仕様でしょう
うむ
第1034019283次OOP宗教戦争勃発か…
いい加減、SmalltalkにCをインラインに書く仕様がした方といいと思うけどな。 XCode4.0以降、実装は実質そうなっているぽいが?
たとえば、今のObjCのどんなとこがいやなの?
(ほとんどの言語がそうだけど)複数の返値を認めてほしいなあとか、思った。
面倒がらずに構造体 エラーとか、別の意味のものを複数ならポインタで十分では
メソッドに複数の戻り値を指定できると便利かもしれんけど、 もし仮にそういう仕様を実現する場合、戻り値の受け記述は =だけでは表現できなくなっちゃうね そう言う意味では、構造体を戻り値にした方が確かにしっくり来る
495 :
493 :2012/01/06(金) 01:25:07.91
luaなんかはこんな感じで=だけで複数戻り値できるけどね x, y = func(); function func() return 1, 2; end
>>495 なんということだ、その手があったか
便利すぎる。。
ところでluaって言語初めて聞いた。。
PHPみたいに、list($a,$b,$c)=func(); じゃ駄目? aString, bString, cString = [self getTripleStringWithIntA:aInt, bInt:bInt cInt:cInt]; とか出来ると凄く記述が楽になるんだけど。
複数戻り値をもつ言語って結構あるんだな 逆に、カンマ区切りで複数戻り値表記ができる場合の 弊害って何かあんのかね…。
499 :
493 :2012/01/06(金) 01:40:03.49
>>497 そういう場合は大抵abcに関係があるだろうから、
構造体や辞書で表してもスッキリする気がする。
意味がバラバラなら、今度は順番を気にする必要が出てくる。
これは戻り値だけじゃなくて引数にも言えることだけど、
Objective-cはラベルが付いてるから。
だから、できることがそんなにメリットになるのかな。
できたらそれはそれで、使うだろうけど。
>>499 確かにObjective-Cのメソッドメッセージの表現は、
各引数の意味とメソッド名をかねられる、まれにみる秀逸表現なのに、
複数戻り値にすることによって、結局、
「あれ?2番目の戻り値ってなんだっけ?」
的なことになっちゃうな
501 :
デフォルトの名無しさん :2012/01/06(金) 02:00:48.52
[self age];
言語仕様はともかく字面は高度に汚いと思う。
Scheme で多値は割と便利だけど、Obj-Cで語るのはC言語に多値が導入されてからにしてくれ。
>>504 たすかに
Obj-CはCのスーパーセットだからね
Cでできる記述は、全てObjective-Cコード上でも使える これが強みじゃない? Cがわかってる人には、逆に入りやすい言語だと思うのよObj-C
唐突に何今更なことを
メソッドメッセージコールと関数コールが共存してるソース見るとObj-Cらしさを感じる オブジェクトに対する操作とそれ以外の操作の表現が明確に違うのは、慣れるとわかりやすい
>>503 特に嫌いなのはインデントだな
ずーっと右端の方で固まって、左側がすっかすかになるのがヤダ。
511 :
506 :2012/01/06(金) 02:32:05.66
512 :
デフォルトの名無しさん :2012/01/06(金) 02:57:08.15
obj-cの独特な表現を最初見た時は何じゃこれって思ったけど、 慣れてくると、むしろ癖になる不思議
Obj-CよりC#のがよっぽどいい
514 :
512 :2012/01/06(金) 08:10:21.73
つまり、Java記法がよいと
間をとってRuby最強!
>>513 DelphiやVisual Basic のような簡単さと
C++の良いところ取りだからね。
これはいいと思うよ。
俺もC#はけっこう好きだな。 お手軽感と強力さが両方ある。
C#は言語そのものよりライブラリが強力すぎる あれならバカでもプログラミングできる
Cocoaの事か・・・
.NETの話を持ち出すとCocoaのほうが優れてる!と暴れる奴がいるので禁止
アニメーション機能はCocoaの勝ちだな。
522 :
512 :2012/01/06(金) 22:38:21.13
Core Animationも魅力的だけど、Core Audioも使いこなしてみたい
CoreAudioは悪夢だわ
524 :
512 :2012/01/06(金) 23:47:14.34
>>512 Objective-Cの記法は、独特だけどいいよね
クラスメソッドは先頭に+、インスタンスメソッドは先頭に-をつける
というところも、staticだの何だのつけるよりわかりやすい
// Class method
+ (void)classMethod:(id)arg {
// operation code here ...
}
// Instance method
- (id)method:(NSObject*)arg1 with:(int)args2 {
// operation code here ...
return obj;
}
引数ありメソッドの記法には、慣れるまでは、わかりにくく思えるが、
慣れると、引数の意味がメソッドメッセージ名に含まれてるので、
驚くほどわかりやすい
526 :
デフォルトの名無しさん :2012/01/07(土) 01:48:49.44
>>525 メソッド呼び出しとかだと
Obj obj = [Obj alloc];
[obj initWithString:@"Hello"];
とかね。
正直、最初見たときは、ものすごい違和感を感じた
Smalltalkやってる人にとってはそうでもないのかもしれないけど。
>>526 init系methodの返り値捨てたらダメだろ
Objのroot classがNS系でない独自仕様ならばその限りではないけど
>>527 NS系なら、こんな感じで入れ子にするよね
※int型変数aの値を出力するとき
NSString *str = [[String alloc] initWithFormat: @"a = %d, a"];
NSLog(str);
それか、+stringWithFormat:使って
NSLog([NSString stringWithFormat: @"a = %d, a"]);
か?w
>>527 あれ?
NSObjectのサブクラスのinit系methodは、
[obj initWithString: @"hoge"];
で、objが参照するオブジェクトを初期化してくれないんだっけ?
してくれる。527は勘違いしてる
obj = [obj initWithString: @"hoge"];
532 :
531 :2012/01/07(土) 03:56:36.90
initが失敗してnilを返したときにどうしようも無くなるな。
謹製のクラスクラスタがallocで返すのはファクトリオブジェクトなので使えません。 id obj = [NSString alloc]; // ファクトリオブジェクト NSLog(@"%@(%p)", NSStringFromClass([obj class]), obj); obj = [obj initWithString:@"Hello"]; // 文字列を持てる通常のインスタンス NSLog(@"%@(%p)", NSStringFromClass([obj class]), obj);
で?
説明が足りないな allocで返されたファクトリオブジェクトは -initXXX 内で - (id)initXXX { id obj = [[Siblingclass alloc] initXXX.]; self = [super init];[self release]; // ファクトリオブジェクトがシングルトンなら不要 return obj; } のように自分の親類クラスを生成初期化して返します。 つまり、+allocが返すインスタンスと、-initXXXの返すインスタンスは別物です。
で?
え? ここまで書いても分からないの?
こんなのわかってない奴いんのかよって話 ドヤ顔で書くなよ
540 :
デフォルトの名無しさん :2012/01/07(土) 13:12:26.99
>>536 そうなの?init(初期化)と言ってるくせにまた内部で+allocしてんの?
んな馬鹿な。。
だったら何のために+allocメソッドがあるの?
initXXXが-initXXXである必要は?
ほんとにそうなら、+allocなんか要らなくて、それこそ、+initXXXで
あってもいい気がするんだが
>539-540 何をどう返せばいいか分からないw
allocationとinitializationの違いがわからない人がいるらしい
馬鹿を馬鹿と見抜けない人には(Objective-Cを使うのは)難しい
UILabelにカスタムプロパティを追加する方法はUILabelのサブクラスを作るしかないのでしょうか?
何を返せばいいかわかんないから個別に答えるか
>>539 >524からの流れを読もうね?
>529,530のような人がいるから書いてるんだよ
>>540 その疑問は確かにそうなのだが、
外部の使う人から見た時どう見えるかとか、
コーディングのバランスの問題とか、
クラスクラスタのルートクラスにファクトリ書くのはどうなの?とか、
The Objective-C Programming Languageでallocとinitはセットで使うように規定されてるとか、
等々の大人の事情だと思ってください
>>544 @interface UILabel(Hoge)
@property (copy) NSString *extendedText;
@end
@implementation UILabel(Hoge)
@synthesize extendedText;
@end
で出来なかったっけ?
>>547 ありがとうございます。
試してみます。
次は初心者板に移動します。
>>547 が使ってんのは「カテゴリ」だからそれ調べろ
>>536 のように、まるでうそがほんとうのことのように書いてある
恐ろしいスレだ
どうあっても俺は間違ってないって言いたいのなら、もうそれでいいよ
>>533 ,534等、実装次第で不都合が出てくるから分けるなって言いたいだけだろ。
id array = [NSArray alloc];
[array init];
[array count];
こんなことやっても動かんぞ。
555 :
デフォルトの名無しさん :2012/01/08(日) 12:37:48.31
556 :
デフォルトの名無しさん :2012/01/08(日) 12:45:01.55
>>518 そのうちclangあたりが.netバックエンドに対応すんじゃね。
.netのスクリプティングランタイムなら
Objective-Cとも相性いいだろうし
>>554 これ、実装的にまるっきり別物になってないか?
id array = [[NSArray alloc] init];
はinitの戻り値をarrayで受けてるんだから、
id obj = [NSArray alloc];
NSLog(@"%@(%p)", NSStringFromClass([obj class]), obj);
id array = [obj init];
NSLog(@"%@(%p)", NSStringFromClass([array class]), array);
NSLog(@"%ld: ", [array count]);
で、普通に動くだろ。
>>557 どうも
>>554 によると、
[obj init];
単独と、戻り値を受けずにobjを使うことはできないんだと。。
>>557 >>526 ,527からの流れを見ろよ
initの戻り値を捨てるなって話なんだからさ
んなことは解ってるし、誰に向けて書いたレスかちょっとは考えてくれよ
>>558 お前も曲解すんな
>>544 にそんなこと書いてないだろ
>>554 の
>こんなことやっても動かんぞ。
だけじゃ、戻り値受けなしでは使えないと言ってるのと同義だろう。。
>>562 いや、そう読ませたいなら
>>434 で完璧に終わってるだろ、
allocの戻り値とそれを因数にしたinitの戻り値は違うとこれ以上無い書き方がしてあって
>>554 書いていることは混乱が増すだけ。
>>563 終わってるなら、それ以降の流れにはならないんじゃね?
それ以降も続くなら別の手法で理解の助けとするでしょ。
>>534 ではエラーにはならないからな。
initの戻り値を捨てた結果どうなるかっていう、実際のテストケースで
もし混乱するなら、どっちにしろ
>>534 が理解できてない。
>>565 >実装次第で不都合が出てくるから分けるなって言いたいだけだろ。
って書いたんだろ?
わけても全然問題なくね?っていわれてファビよるなよ
因数
>>566 問題があるのに、
問題無いのがあるからOKっていうのはダメだろ。
ファビョッてるとか無駄に煽るなよ。
(´・ω・`)
(;_;)
571 :
デフォルトの名無しさん :2012/01/10(火) 15:36:37.86
この3つの違いがよくわかりません。 というか、アクセサメソッドをどうして設定する必要があるかよくわからないです。。。 よかったら教えてください @interface BackView : UIView { //NSString *strHTML; } @property (strong, nonatomic) NSString *strHTML; --------------------------------------------------------- @interface BackWebView : UIView { NSString *strHTML; } //@property (strong, nonatomic) NSString *strHTML; --------------------------------------------------------- @interface BackWebView : UIView { NSString *strHTML; } @property (strong, nonatomic) NSString *strHTML;
番号振っとけよ 上と下は@synthesizeで変数名変えなきゃ等価 中は変数は確保するけどアクセッサは作らない。
変数の宣言についておしえてほしいんですが、 例えば、このスレにあった MSPanty *panty = うんぬん; と MSPanty* panty = うんうん; とではなにが 違うんでしょう? アスタリスクは変数名にくっつけて書くものと思っていたのがobjective-cでは離れているコードをたまに見かけます 単に方言のようなものでコンパイル時には同じあつかいなのでしょうか?
同じ
>>574 ありがとうございます
すっきりしました
C従来のポインタ表現なら、上だよね。。 だから、おれはキャストのときも(MSPanty *)の様にして書く
俺もそう書くけど、型なんだからくっつける言われたことあるな
いい加減ポインタなんてものは捨てるべきだと思う
だって参照より早いんだもん
型 T に対して、 T*p; T *p; T* p; T * p; のどれも同じ意味。(スペースは無視される。) C 言語では伝統的に T *p; だけど、C++ では T* p; と書く人が多いね。 自分は T *p; と書く。理由は、T* p, q; だと q も(ポインタじゃないのに)ポインタに見えるから。
うむ、やっぱ T *p;だよ Objective-CはCのスーパーセットなんだからCの書き方に準拠したいし
好みの問題だし、どっちでもいいじゃん。
ほんとにどうでもいいよ。 どこでインデントするかと同じ好みの問題。 好きにしろ。
で、MSPantyってなんやねん
好みと言うよりはコーディング規約のような もしかしたらバグも防げるかもしれないし
何のバグだよバカ
T* p; 派の人が怒ってます。。
constで修飾すること考えると T* p; --> T* const p; の方が自然だよ。*pと書く人は T *p; --> T *const p; には抵抗あるんじゃない?
T *const p; って普通に書くよ
てか、それなら const T *p; って書かない?普通。。
T*を一種の型と見るならT* pが自然だろ だから const T* p
書かない
T *cont p; と const T *p; は別物 const T *const p; もあるよ。 調べてみてね
オブジェクト変数は、実質構造体なんだから、T *p;のほうがしっくり来たから おれはT *p;でかいてるなぁ まあ、どっちも合ってるからどっち使ったっていいんだけど
あ、構造体へのポインタか
お前らObjective-Cの話をしろよ 細かいこと気にしてるとハゲるぞ
もう手遅れだからいいんだよ
まあ、アスタめんどかったら、id型使えばよいのだ
32bitOSで128bitの構造体Tへのポインタを宣言する場合、 T* p ←32bitのポインタ型だと分かりやすい T *p ←128bitの構造体と思いきや32bitのポインタ型 T * p ←優柔不断
??? 変数名の直前にアスタが来るのがポインタの表記 だから、 >T *p ←128bitの構造体と思いきや32bitのポインタ型 などとはみじんも思わない 構造体のポインタだろうなとすぐわかるけど。。。
まあ、普通アスタを変数名の直前に書く
その理由は
>>580
俺も
>>580 の最後には同意
Objective-C勉強したてのころそれでハマった
>>596 Objective-CはCの完全上位互換なんだから、Cの話はObjective-Cの話でもある
もうObj-Cなんか捨ててC#にしようぜ C#はISO標準化されてるんだから、MacOS XとiOSのネイティブコードにコンパイルできる公式コンパイラ作ってくれよ IDEは我慢してやるからさ @とか-とか[]とかキモすぎなんだよ
Java的な記法も俺は好きだよ ただ、それをここで言うなよ。。
606 :
571 :2012/01/11(水) 00:27:58.73
>>572 ありがとうございます。おかげで理解できました
>>604 mono touchはどうしてるんだろう?Objective-Cにコンバートしてるんだろうか?
よろしい、ならば間をとってObjective-Dだ
monoはJavaと同じインタプリタランタイムだから、iOS上で動く JITさえ作っちゃえば、あとは中間言語に置き換えるコンパイラは何だっていいはず
mono touchネイティブにコンパイルしてるはず
は が抜けた
それmono touchは違うだろ
>>613 どうなっとるの?
こんな感じ??
1. C#で中間コード(バイトコード生成)
→これにより、マルチプラットフォームを実現
2. iOS、Android OS用にコンパイラが用意されてて、上記のバイトコードを
ターゲットのプラットフォーム用のコンパイラでバイトコードにコンパイル
3. ネイティブコード(=アプリ)をAppStore, android marketで配布
>>614 修正w
1. C#で中間コード(バイトコード)生成
→これにより、マルチプラットフォームを実現
2. iOS、Android OS用にコンパイラが用意されてて、上記のバイトコードを
ターゲットのプラットフォーム用のコンパイラでネイティブコードにコンパイル
3. ネイティブコード(=アプリ)をAppStore, android marketで配布
ほう、JITはないけどMono VMは一緒にセットになってるんだね
MonoがじわじわとJavaの領域を乗っ取り始めてるんだな
Javaに比べるとC#ははるかに良い言語だから使えるならMonoを使うわな
>>617 >ほう、JITはないけどMono VMは一緒にセットになってるんだね
VM と言うか、ランタイムがつくと思った方がいいかも。
Objective-CでCGI書いた人おる?
CGIとはなにか、その動作原理は?ってことが分かってたらObjCだろうと何でもいいよ CGIを作るに当たって便利なパッケージがあるかどうかが聞きたいのなら ストレートにそれを聞けばいい
いやそんなスカしたこと言われても… 便利なframeworkがあったらなんとかなるもんでもないでしょあれ? Apple製のObjCランタイムがないと動かないんじゃないの? そういう細かい話があるから実際CGI書いて動かした人を尋ねたほうが早いんだよ
GCIなんて標準入出力さえ扱えればどんな言語でも書けるじゃん。
typo
結局何が知りたいんだよ いるかいないかじゃ、いるに決まってるだろ 「Objective-C CGI」でググれカス
Objective-CでWindowsアプリ書いた人おる?
Windowsアプリとはなにか、その動作原理は?ってことが分かってたらObjCだろうと何でもいいよ Windowsアプリを作るに当たって便利なパッケージがあるかどうかが聞きたいのなら ストレートにそれを聞けばいい
(´・ω・`)
(´・ω・`)とはなにか、その動作原理は?ってことが分かってたらObjCだろうと何でもいいよ (´・ω・`)を作るに当たって便利なパッケージがあるかどうかが聞きたいのなら ストレートにそれを聞けばいい
iPhoneの修理って、現状は本体交換しかないってほんと? 全体に影響のない故障でも一律本体交換なの?
>>626 いや、だから素直に居たら居るて答えてくれればいいだけで
居ないんならヌルーでいいよ
聞かれている言葉に素直に耳を傾けようよ君は
>>633 少しプロジェクトが難航しててイライラしててな
すまんかった
635 :
632 :2012/01/11(水) 13:33:19.13
おう、誤爆してたわ、スマソ
ランタイムは今のところAppleのとGnuStepかな? 両方にNSProcessInfoがあるからそれ使っとけ
それ使ってなにすんの?
それは教えられない CGI作るには有用だけどね
>>634 こちらこそ忙しい時に
くだらない質問に付きあわせてしまって申し訳なかった(´・ω・`)がんばってくだちい
frothkitとかCappuccinoとかCocotronとか気になる単語はめっちゃあるんだよ でも日本語ソースは全くない もう日本人でも日本語情報はあてにしてないのが現状だろ ググッても意味のない時代がきてるよ
キチガイ多め
欲しいものをちゃんと説明した上で欲しいといえない→正常 欲しいものは、はっきり欲しいと言えという人→キチガイ
どーでもいいことですぐピキる それが2chくをりてぃー
どうでもいいかどうかは俺が決める
いや、俺が決める
どーでもいい [おまえら release];
Objective-C CGI 基本編 #import <Foundation/Foundation.h> #include <stdio.h> int PrintString(NSString *format, ...) { int result = 0; va_list ap; va_start(ap, format); NSString *str = [[NSString alloc] initWithFormat:format arguments:ap]; va_end(ap); result = printf("%s", [str UTF8String]); [str release]; return result; } int main( int argc, char *argv[]) { id pool = [[NSAutoreleasePool alloc] init]; id env = [[NSProcessInfo processInfo] environment]; for(NSString *key in env) { PrintString(@"%@ -> %@<BR>¥n", key, [env objectForKey:key]); } [pool release]; return 0; } あとは自分で頑張れ
どったの?急に
ヘッダは?
ヘッダなんかいらねぇよ、ハゲ
@implementation ChoiHoge // ... @end @interface ChoiHoge : KusoHoge { } // ... @end がいないお。。。
>>651 "Content-Type: text/html\n\n"
くらいは最初に必要なんじゃないの?
∝
メソッド一つでカテゴリ分けるのってやめたほうがいいかな 150行くらいだけど
見やすくなるんならいいんじゃね?
>>656 そうだよね。このままで行くことにする
サンクス
iPhoneのUItextViewのカーソル位置ってどうやって取得すんの? selectedrangeは指定用っぽいんだけど
ん?selectedRangeから取得じゃだめなの?? 以下抜粋 selectedRange The current selection range of the receiver. @property(nonatomic) NSRange selectedRange
UITextViewのオブジェクトをaTextViewとすると、 aTextView.selectedRange.location で取れないの?。。。。。
分かってないだけでしょ readonlyなプロパティはあってもwriteonlyなプロパティなんかないよ
>>661 いくらでもあるが、
例えばAutioUnitのkAudioUnitProperty_MakeConnection
ちょっと何言ってるかわかりませんね
>662さんはObjective-Cに規定されてるpropertyと一般的なpropertyの区別がつかないんじゃないの?
読みにきたら例外投げるとか どれだけ意味があるのかわからんけど
stream関連は、writeonlyがある様に思えるが。
@property 宣言しなくても、setXxx: メソッドがあれば obj.xxx = ... って書けるよ。
というかpublic メンバはふつーに->で参照できるっしょ
だから何なの?w
iPhoneのアプリIBで組んでるとステータスバー押してもスクロールビューとかテーブルビューとかがscrolltopしないの俺だけ?
スレチ
>>672 iPhoneネイティブすれあったのね。サンクス
iPhoneスレに書けないんでこっちに書くが、 タブ型のiPhoneアプリで、 UIVIewのアニメーションブロックでアニメーションをしているときに、 タブを切り替えると、即座にアニメーションが終了してしまう(animationDidStopが呼ばれる) 何か解決方法ない?
>>674 スレ違い。この板にも iOS プログラミングのスレあるよ。mac 板も復活したし。で、標準のタブコントローラ使ってるなら、タブ切り替えたらビューも切り替わるから、アニメーションが止まるのは仕様じゃないかな。
677 :
!674 :2012/01/20(金) 00:26:00.23
すれ違いちゃあそうかもしれんけど、少しくらいいいだろう
全然関係ない話じゃないんだから
>>975 はもう来なくていいよ
ダメだよ つーかこいつiPhone板にもマルチしてるし
カス野郎だな
わかんないからってたたいちゃだめ
俺はわかんないけどスレ違いのマルチ野郎は容赦なく叩くよ やってること荒らしだしね、花王のコピペと同じ
質問。たぶんCの話だと思うけど^ってなに?メッセージ構文の直前に付いてるのをよく見かけるんだが、bit ORだとしても意味がわからん。
Blocks
ARCについて質問です。 下のClassAのfunメソッドで__weakインスタンス変数oを初期化してますが 本来なら__weakのため初期化した瞬間にNSObjectは解放されますが @propertyでstrongを記述してるので、インスタンス数oは__weakでなく__strongになるんでしょうか? @interface A: NSObject { __weak id o_; } @property (strong, nonatomic) id o; @end @implementation A @synthesize o = o_; - (void)fun { o_ = [[NSObject alloc] init]; }
>>684 ごめんなさい。この質問スルーでお願いします。。
blocksっていうclang系の拡張。 所謂レキシカル・クロージャ。
>>688 ありがとう色々調べられた。
しかし結局意味がわからん。
諦めろ
>>689 qsort(3)の第4引数に直接関数書けるようにした
みたいな感じ
あとその直接書いた関数の中から、字面上で外側のスコープにあるものが見える事も重要。
>>691 OSX 10.6以降では実際書けるし。
/usr/include/stdlib.h
void qsort_b(void*,size_t,size_t,int (^)(const void*,const void*));
691が言ってるのはそれだろ
Grand Central Dispatchでディスパッチキューに登録されたタスクを実行中の場合、 このタスクを途中で強制的に停止&削除するにはどうすればいいんでしょう??
696 :
689 :2012/01/24(火) 04:35:03.46
>>691 理解したぜ!ようはfunctionでスコープ前の変数はconstant化してキープするってか。
697 :
689 :2012/01/24(火) 04:37:11.18
可愛そうに
699 :
689 :2012/01/24(火) 04:42:11.49
700 :
689 :2012/01/24(火) 04:48:56.59
なんで^が( )の中に入ってる?^{ aaa }か^( aaa ){ bbb }とかvoid (^aaa) (void) = ^{bbb}じゃないのん?
変数名が省略されてるだけだろ。阿呆かお前
702 :
689 :2012/01/24(火) 05:38:12.42
C言語は書き方が変態。字面で見たまんますんなり頭にはいってこない。 関数ポインタとかブロックスの構文とか、読んだ後に頭で咀嚼しないといけない。 この書き方を考えた奴は頭が捻くれているとしか思えない。 その点、Lisp系の言語は読みやすくていいね。
call-with-current-continuation とかそういうのですかそうですか
char* a[] = { "hhh", "CCC", "zzz", "QQQ" }; qsort_b(a, 4, sizeof(char*), ^(const void* x, const void* y) { return strcasecmp(*(char**)x, *(char**)y); }); (sort '("hhh" "CCC" "zzz" "QQQ") #'(lambda (x y) (string<= (string-downcase x) (string-downcase y))))
来季はロシアっ娘達も参戦してくるし、ヨナや安藤も復帰してくる可能性があるから、 真央ちゃんにとっては、台乗りできる最後のチャンスかもしれないよ。
スマヌ。ゴバクシタ
大差ないじゃんって思って書いた。
The WinHttpGetIEProxyConfigForCurrentUser function retrieves the Internet Explorer proxy configuration for the current user. Syntax BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser( __inout WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *pProxyConfig ); Parameters pProxyConfig [in, out] A pointer, on input, to a WINHTTP_CURRENT_USER_IE_PROXY_CONFIG structure. On output, the structure contains the Internet Explorer proxy settings for the current active network connection (for example, LAN, dial-up, or VPN connection). Return value Returns TRUE if successful, or FALSE otherwise. For extended error information, call GetLastError. Among the error codes returned are the following.
713 :
デフォルトの名無しさん :2012/02/01(水) 18:21:41.92
@interface MyUIButton : UIButton { NSString *source; } @property(nonatomic, copy) NSString *source; のように拡張して、button.source = @"hoge"; のように使おうとすると、 -[UIRoundedRectButton setSource:]: unrecognized selector sent to instance 0x8830ca0 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIRoundedRectButton setSource:]: とエラーが出た。どう対処したらよいか教えて。 UIButtonの拡張自体が良くないなら、その理由についても少しかみ砕いて教えてほしい。 Webでそのような記事を見かけたけど、うまく理解できなかった。
サブクラスを作るんじゃなくカテゴリでUIButtonそのものを拡張すると 幸せになれるかもしれないね 試したわけじゃないけど
>>713 buttonがMyUIButtonのインスタンスじゃない
>>714 カテゴリで変数を追加しようとしたら、
lvars may not be placed in categoriesとエラーが出た。カテゴリに変数って追加できるもの?
>>716 associatedObjectを使えば出来なくはない。
>>713 そもそも何がしたいのさ?
たぶん、view をいじるんじゃなくて、controller でなんとかすべきだと思うよ。
>>716 意外と簡単だった
- (NSString *)source
{
id result = objc_getAssociatedObject(self, @"source");
return [result copy];
}
- (void)setSource:(NSString *)string
{
objc_setAssociatedObject(self, @"source", string, OBJC_ASSOCIATION_COPY);
}
721 :
713 :2012/02/01(水) 19:54:43.63
レスしてくれた人、ありがとう。
>>717 >@interface MyUIButton : UIRoundedRectButton {
cannot find interface declaration for 'UIRoundedRectButton', superclass
と出るのだけど、なにかを@importすれば使えるようになる?
>>719 テーブルセルのなかでボタンを自動生成するようにしてたのだけど、追加情報が必要になって、
最初は、associatedObjectを使ってたのだけど、
>>720 のようにクラスタ内でやる方法が思いつかず、
外部からデータを埋め込んでいたら、キー管理が煩雑になったので、派生クラスを使おうと思い立った。
>>720 ありがとう。とても参考になった。
OBJC_ASSOCIATION_COPYした場合に、deallocでのreleaseは考える必要ある?
>>722 >Listing 6-1の下にちょろっと書いてる
ありがとう。OBJC_ASSOCIATION_RETAINは書いてるけど、OBJC_ASSOCIATION_COPYのほうは書いてないね。
まあ、RETAINで解放されるなら、COPYでも解放されるだろうけど。
724 :
デフォルトの名無しさん :2012/02/02(木) 20:10:36.75
何だこの糞言語は? 作ったやつバカだろ?[]が気持ち悪いんだよさっさと消えろ
最初期に読んだオブジェクト指向の本がその人のだったかも。
てか、
[おまえ dealloc];
のほうがいいな。retainカウント考慮するまでもなく即刻消えていただいておk
>>724
>>724 >何だこの糞言語は?
obj-c は確かに色々酷いけど、[] 表記に文句言う程度の人に言われる筋合いはないと思うの。
わざわざ書き込んだ
>>724 は、きらいといいつつ気になっちゃってるかわいいやつ
きらいきらいも好きのうち
Brad Coxの話にでもなるかと思ったらみんな罵り合いの方が好きだった
C#と違いCの上位互換であり C++よりOOP純度が上でしかも易しい 触ったことないけどObjC最高!
最後の一行で台無し
俺はこの言語1番好き
734 :
デフォルトの名無しさん :2012/02/05(日) 00:57:42.14
エラーの出し方が糞 どこで引っかかってるのかエラー見るだけじゃわからんこと多すぎだろ 死んでいいと思う
ガベージコレクションがついたらつかうかもしれない(もうついたの?)
ついたよー ただしOSXのみな
Javaに慣れすぎなんじゃね?
iPhoneにはガベコレないけどARCが出たからいいじゃん
C#好きが嫉妬して吠えてるのか?
嫉妬する理由が思い当たらんのだが
じゃ、なんできらいだぁってガキみたくわざわざ書き込みにくるんだろうなぁ
そういえば、C#スレでC#嫌いだってレス見たことないな・・・
単純にObjective-CがC#より扱いにくいからでしょ C#やJavaから入った奴からすれば発狂するレベルだと思うわ
おれはOOPはJavaから入ったけど、Obj-Cはおもしろいなとは思ったけど 扱いにくいとは思わなかった
OOPはC front(C++の初期ね)とsmalltalkからなせいかObje-CはsmalltalkとCのアイノコでちょっちキモイわ っつっても感じたのはNextStepの頃なので今は慣れたけど
746 :
デフォルトの名無しさん :2012/02/05(日) 16:43:17.31
いやー普通にこの言語開発したやつが頭悪すぎなだけだとおもうわw 汎用性のない言語だし閉鎖的だし、便利にしてやろうとがんばったけど自己満足で終わって大不評みたいな? Iphoneが終わったらこの言語もまた一部の偏狭的なマニアだけが使う言語になるだろ
お前がそう思うんならそうなんだろ
iPhoneのせいで
>>746 みたいなカスがよってきてウザいわー
ObjC信者はObjCが最強だと思ってるんだから放っといてやれよ その信念はC++信者より強固だからな 言うだけ無駄
750 :
デフォルトの名無しさん :2012/02/05(日) 18:15:57.99
スマートフォン自体がうざいんんだよ。 しょうもない、ガキ、糞共が。逝け
>>746 汎用性があって開放的でみんなが便利だって言ってる言語ってなに?
気をつけろ、お前ら全員中二病に見えるぞ 言語で熱く語り出すのだけはやめておけよ、絶対だぞ、ぜったい語るなよ
釣られすぎだろ
まあAppleが採用していなければこの世から消えていた言語だからな
MSがObj-C採用してたらそんなに叩かないくせに。。
もっと文句が出てたと思うがw
そのくらいC#大好きなんだねみんな。ちょっとびっくり
Objective-C : NeXTとAppleの系統以外で採用されず C# : 頼んでもいないのにオープンソースプロジェクトが立ち上げられUNIXやLINUXで動作する環境が整えられている どちらが優れているかなんて言うまでもないだろ
GNUstep も知らないのにレスするなよ
GNUstepはNeXT系だろうが 馬鹿はお前だろ
764 :
デフォルトの名無しさん :2012/02/05(日) 21:19:29.98
まあ信者以外は糞だとe思ってるよwこの言語はw 今まで見た言語の中で一番糞 もちろんXcodeもなw 糞言語に糞エディタw
>>761 そりゃ言語じゃなくて環境の話だろ。
Objectiv-Cという言語に限ればWindowsでもUnixでも利用可能だ。
なんか伸びてると思ったらクズみてぇなレスつけてんじゃねぇよ、クズども
>>764 どこら辺が糞だと思うの?
具体的に頼む。
768 :
デフォルトの名無しさん :2012/02/05(日) 21:32:33.65
誰がこんなマイナー言語をわざわざWinやlinuxでやるんだよw超少数派だろw 糞なところは散々既出 良いところは継ぎ接ぎ感はあるが比較的習得が容易な言語だというところ
やはり具体的に言えないのか
Blocksが素敵すぎると思ったが、ARCが実装されて もはや無敵の言語なったんじゃね?これ。 デザパタを強要する仕組みも、慣れれば自然と構成を 考える習慣が身についてこれしかないと思えてくるしな。 CoreDataは、某MSのADOなんかよりずっと洗練されて るし、CoreGraphicsのアニメーションの扱いやすさなん かもうWindows環境になんか戻れないって感じだよな。
長文書いてる奴は一言にまとめてくれないか?
>>768 みたいな奴にはObjective-Cも糞にしか見えないだろ。
可哀相だが俺にはどうすることもできない。
馬鹿は二言以上の文章は理解不能らしい
ObjCが前世紀に全然流行らなかったのは ObjCのシンタックス覚えていくときオブジェクト思考を ある程度前提とするのに一般人がオブジェクト指向を イマイチわかっていなかったことと、実行速度も 遅かったことが原因だったわけだが JAVAやRuby/Python等によってオブジェクト指向が パンピーにも理解されてきて実行速度もかなり 改善されてきつつある。 つまりようやく時代がObjCに追いついてきたといえよう。 触ったことないけどObjC最高!
>>763 Win は NeXT系 ですねわかります。
さすがですね。
SOAPとは何だったのか CORBAとは何だったのか WindowsCEとは何だったのか
Cの部分よりもObjectiveの部分だと思う
iOS系のプログラミングスレの質問はびっくりするぐらい低レベルだからね あのレベルの人たちからするとObjCのような低級言語はかなりきついと思う 無効なオブジェクトへのアクセス一発で落とせるからな
ObjCはヌルポで落ちないから逆に親切らしいぞ
ヌルポはExceptionなのでキャッチして捨てるという荒業を使えば落ちないよ?
メモリリークでメモリワーニング食らって落とされてる系が多いに一票
iphoneユーザとして2年、iphoneアプリ開発者として半年、Andoridユーザとして2か月(買ったばかり)の者だけど、 アプリにもよるんだろうけどメモリの制限はAndoroidのほうが、厳しい気がする。 2chまとめというアプリが iphoneでもAndoridでもあるけど、 iphone(3GS)では一度も落ちたことがないのに、Android(イーモバGS02、2.3.5)では、たびたび落ちる。
何でそれがメモリの制限の話になるの?
馬鹿にはわからない深い考察ってものがあるんだよ
787 :
784 :2012/02/07(火) 17:22:26.52
書き方が足りなかった。 androidで落ちるときに、「メモリが足りないので強制終了します」と表示されるので。
裏にいる人も活発にメモリを使うとか、そんな感じなんだろうか。
いやだってjavaじゃん
javaだと?
Javaがどーした?
これだけ ぬるぽ が出てるのに誰もガッしないのはやはりObjCスレだからか?
アプリ作ってると数時間でメモリが残り1G切るんだけどなんでだ? ちなみにメモリは16G
宇宙刑事シャリバンは、僅か1ミリ秒で赤射蒸着を完了する
どうやって計ったの?
いやそういう設定
そこで、Apple としては、Objective-C# なんてどうですかね? w
>>799 Objective-C++/CLIとセットで?
Objective-VBだろ C++/CLIはオワコン
C#で開発させろとは言わないがそれと同等以上の環境はほしいな
最近は馬鹿プログラマーはC#に集中しているのか?
C#使ってる時に限れば、Visual Studioはなかなか素晴らしいよ。
Visual StudioでObjective-Cも書きたいとこだなー
>>804 Visual Studioのどこら辺が素晴らしいの?
>>806 デバッガまわりかな。
あと補完とかリファクタとかも、Xcodeがぎこちなく感じる。
慣れの問題じゃね?
XCodeのデバッガはGDBだからGDB触ったことないと分らんだろうな。Unixでは定番のデバッガだけど。
Xcode以前から普通に触ってるけど。
GUIのフロントエンドだとdddなんかも使ってたよ。
どっちにしろコマンド打たんといかんからGDBの知識はいるな。
>>803 Javaから移行してる奴が多いんだから言わずもがなだろ
814 :
デフォルトの名無しさん :2012/02/10(金) 00:29:56.71
NSMutableDictionaryでテーブルを表示して、その一行を削除したいんだけど、 NSMutableDictionaryにはkeyか全てを消すメソッドしか見当たらないのよね。 どうしたもんかしら。
一行とかイミフ
まず日本語
翔泳社の「入門 Objective-C 2.0」てのを買ったんだけど、 「サンプルプログラムはxxxxフォルダにあります」という記述がちらほら。 CD-ROMとかついてないのにどこにあるの?どっかウェブで公開されてるの かな。どこにも書かれてないようだけど… 誰か知ってる人いますか?
>>818 う、そのページ一度見たのに...ぼけてたのかな。
どうもありがとう。
どうでもいいけどその本って、訳が微妙だよね。 あぁ、こういう文が原文だったのだろうな・・・とかいうのが感じれたり、 いちいち私たち私たちうるさい。 別に、分かりづらいことはないけどさ。
どうでもいい
教えてください。質問スレってどこでしょうか。お願いします。 ここでよろしければ教えてください。 UILabelで、英文を並べると、例えば「I am a pen.」って指定すると、 [I am a pen.] っと、width指定サイズいっぱいいっぱいに表示されてしまい、解決方法を知りたく思います。 お願いします。
[I am a pen.]
ですね。
>>822 は半角スペースでキャンセルされたようです。
連投失礼しました。
obj-cしか出来ないけど将来大丈夫かな? スクリプト言語のjsとかphpすら使った事がない。html.cssはデザインのセンスはないけど使える。 みんな他の言語使えるの?
ObjC以外ならC、C++、Java、VB、C#、VB.NET、C++/CLI、JavaScript、Perl、PHPやれる ObjC以外は全部仕事で使ってる
>>826 Obj-Cができるなら、とりあえずCはOKってことでしょ?
それから、オブジェクト指向プログラミングについてもOK
なんだから、あとは何とでもなるよきっと
>>826 心配なら勉強すればいい。けど、必要もないのに勉強だけしてもなかなかできるようにはならないかもね。
>>828 んなこたーない。retain/release に頼らずにメモリ管理できなきゃ C ができることにはならない。
retain/releaseをちゃんと使えるなら、他のもすぐに使えると思う。
retain/release 出来るなら、GC も ARC もすぐ使いこなせて当然だろうに……
Cにはretain/releaseもGCもARCも無いわけで
この頭の固さが全てを物語っている。 オブジェクト思考的言語を扱う者は統計的にとんでもない勘違的な間違いをする可能性的な傾向的にある。 それがオブジェクト思考的言語である的なー
834 :
833 :2012/02/13(月) 16:31:24.17
すまん、睡眠が少なかったのだと思う。 忘れてくれ。 とにかく寝たい 。
GCはBoehmとかわりと使われてるじゃん。
言語の仕様として存在するわけじゃないから
C自体は超絶プリミティブな言語なんだから、 色々な道具を使ったり、必要とあらば作ったりもできるっていうのが 使いこなせるっていう事だと思うけどね。まあCに限った話じゃないけど。
838 :
833 :2012/02/13(月) 19:52:06.09
要は、プログラマーはバカばっか((いい意味で)自分目線)てことですよね。
つmalloc/free
ここD言語より勢いないじゃないか…
幾つもスレがあるからな。
>>840 この言語に関しては一番活発なのはApple板
843 :
デフォルトの名無しさん :2012/02/15(水) 10:53:42.75
NSMutableDictionaryのデータをTableView(Macのアプリ)にソートして表示させるにはどうすればいいですか? 1列だけならNSArrayに格納してソートして表示させることはできました。 今度はNSMutableDictionaryの複数の列をTableViewに表示したいのです。
>>843 array1 = { 3, 1, 2 }
array2 = { "b", "c", "a" }
があって、array1 でソートしたら
array2 = { "c", "a", "b" }
array2 でソートしたら
array1 = { 2, 3, 1 }
になって欲しいってこと?
複数の配列を使うかわりに、各行の情報を一つにまとめたクラスか NSDictionary の配列を使うべき。
>>844 そういうことです。
データはNSMutableDictionaryで持っています。
知りたいのはNSMutableDictionaryの「ソートの方法」と「Table Viewへの表示方法」です。
>>843 {
"key1"="value1";
"key2"="value2";
...
}
見たいな辞書があって
これとキーが同一の辞書が複数あってその配列を
列=同一キーで表示するってことだよね?
一列だろうと何列だろうと同じ方法で出来るよ
NSArrayControllerを使えばもっと楽かな?
順序を定義するためにもう1個別の配列を使う。
ソートは「NSArray ソート」でぐぐればいくらでも例が出てくる。 NSDictionaryを複数列のTableViewに表示するのは複数列のTableViewに何か表示する時の一番基礎 本家ドキュメントでも、どんな入門書でも必ずこのやり方が書いてある。 ほっとくのが一番。
849 :
844 :2012/02/15(水) 12:42:47.13
>>845 勘違いしてた。もともとデータは NSMutableDictionary で持ってるのね。
この配列をソートするには比較関数を渡してやる必要がある。たとえば、
NSMutableArray *array; // NSMutableDictionary の配列
// key1 に対応する値が整数の場合
[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
int num1 = [[obj1 objectForKey:@"key1"] intValue];
int num2 = [[obj2 objectForKey:@"key1"] intValue];
if (num1 < num2) {
return NSOrderedAscending;
} else if (num1 > num2) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}];
// key2 に対応する値が文字列の場合
[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSString *str1 = [obj1 objectForKey:@"key2"];
NSString *str2 = [obj2 objectForKey:@"key2"];
return [str1 compare:str2]; // localizedStandardCompare: とかの方がいいかも
}];
何でそんな面倒くさいことを教えるかな NSArrayControllerを使えば一般的なソートだったらコーディングすらいらないじゃん NSDictionary ↑自分で詰め込む NSArray ↑CocoaBindingsか自分で設定 NSArrayController ↑CocoaBindingsで各列に接続 NSTableColumn てやれば勝手にテーブルに表示してくれるし、カラムヘッダクリックすれば勝手にソートされる
たしかに、3ミスもしといてノーミス選手相手に金メダルよこせというのは おこがましいにも程があるわな。
そうだな
>>851 今のルールはチャレンジャーを評価する方向に振ってるからありえるだろ。
あぁまたこんなとこに誤爆っとった。スマヌ
自演の誤爆・・・
山ライオンでobj-cに変化ってくるの?
多分、Siri も Mountain Lion に来るね。
そんなあちこちで動かしたら鯖もたないんじゃね?
>>858 iPhoneの数に比べたらMac OSは誤差だろ
>>735 もうついたよ!
はやくしないとなくなっちゃうよ‼
objcのGCはすでにオワコン 信者が崇拝してるだけで、みんなARCに移住中
Luaにすら負けそう
あぁ〜、クッ
おでも最近ようやくARC使い始めた
NSArray *array = @[ a, b, c ]; NSDictionary *dict = @{ k1 : o1, k2 : o2, k3 : o3 }; NSNumber a = @123, b = @YES, c = @'x';
あらあら
うふふ
おーとまちっくりふぁれんすかうんてぃんぐやで。
ググレばか
ARCって、こんなコード書いても大丈夫なん? MyObject *mo = [[MyObject alloc] init] retain] retain] retain];
明示的にretainを書くのはエラー。
そうなんだ? じゃこれははてな MyObject *mo = [[MyObject alloc] init] copy] copy] copy];
変数が参照してるの以外はすぐ捨てられちゃうはず。
まじですか。基本的にretainもreleaseもいらないってことですね。 かなり便利そうですね。
でも俺はいまだに信じられないw
俺も信じられないので「はず」と書いたw
deallocが呼ばれるか試したらいいじゃん
言いだしっぺが試すの法則
呼ばれるに決まってるモノを試す必要はない。 「信じられない」とか言ってる奴がやれよ。
まあちゃんとやっているのでだろうが信じられないんだよw 自嘲の「w」だぞ。なにマジ言っているんだか
MyObject *mo = [[MyObject alloc] init] copy] copy] copy]; だと最終的にdeallocが4回呼ばれるってことだよぜ?
やればわかるよ
信じられないのはARC全般な retain/release/autoreleaseの美しさ(オーナーシップの委譲を全く意識せずにできるところとか)に魅了されて使い込んでいたのとCなのにていう retain/releaseが「使えない」、自分で明確に破棄できない(nil突っ込んだらいいんだけど)てのにCなのにていう
信じられないっていうのは、魔法のようで素晴らしいって意味だよハゲども。
笑った。うまいこというね
試してみました。 そしたらなんと驚愕の結果となりました。
ARCではコンビニエンスコンストラクタってナニに使うの?
NSCopyingプロトコルに適合したMyObjectのdeallocに - (void)dealloc { NSLog(@"dealloc"); } と書いて、(dealloc内で[super dealloc]の呼び出しもいらないんですね!) MyObject *mo = [[[[[MyObject alloc] init] copy] copy] copy]; NSLog(@"end"); ってやったら、ログが dealloc dealloc dealloc end dealloc って出ましたよ。 つまり、NSLog(@"end");に来る前に、不要な3つがリリースされてるみたい。 つうことは単にautoreleaseつけてるわけでもなさそう? なんかかしこいかも。
おつかれさま。その場その場でreleaseなのねえ。賢いねえ (アバターつまんない/思ったよりショボい)
AutoreleasePoolへは、コンビニエンスコンストラクタ的な名前のメソッドから返したオブジェクトが突っ込まれる。
独立の仕方
スマートフォンアプリを中心に売る
サーバーはクラウド VPS
電話はスマートフォンSkype
オフィスはコワーキングスペースを借りる
http://bit. ly/sHz1UU
または
地方にプレハブ型の格安高性能オフィスを建て(300万〜500万)
レンタル自習室&シェアオフィスで収入を得ながらそこでアプリを開発する
http://bit. ly/iLIpJa
http://bit. ly/m7nkew
リンクうぜえ…
このコピペも息が長いな
この言語は、あと何年もつかね?
>>895 appleが持つ間ずっと。
これから膨大なクラスライブラリを書き換える体力なんてappleにはないし、
objcをc/c++へ書き換えることに、ほとんどなんのメリットもない。
MacのクラスライブラリもObjCで記述されてるのはインタフェースの部分だけだがな
iOS5でカレンダーのイベント追加でアラームが付かなくなってしまった… どうしたらこれは解決出来るんだろう
マルチ乙。スレチ乙
>>900 Objective-Cのプログラムに関する質問はどこでするのが正しいのでしょうか
>>902 ありがとうございます。
ご迷惑をお掛けしました。
>>897 だよな。よく考えたらAppleは世界一の会社だしobjcを追求し続けるか。
>>889 えっ?
[super dealloc];
いらないの??
それだと、単にLog吐き出す不完全なオーバーライドになってないか??
ARCならいらない。
[super dealloc] は必ずこの文として必要だったから、ARCでは勝手に呼ぶようになったのでしょう
ARCを使うとして、メンバ変数にオブジェクトをずっと保持しておきたい時にはどうすればいいんでしょうか。 単に、 MyObject *myObject_; を定義して、 init メソッド内で myObject_ = [[MyObject alloc] init]; ってやればいいんですかね? どっかで勝手にリリースされないですか? それとも strongつけてプロパティ宣言しないとダメですか? もしこれでOKだとして、initメソッドに渡された場合はどうでしょう? これまでは、 - (id)initWithObject:(MyObject *)object { : myObject_ = [object retain]; : } ってやって、deallocでreleaseしてましたけど、retainもreleaseも使えないんですよね? この場合は、strongつけてプロパティ宣言するしかないんでかね?
変数は黙ってればデフォでstrongだと思う。
あぁ、メンバ変数はデフォで__strongがつくということですね。 つまりそのクラスの生存期間中は保持されてるということですかね。 外から渡されたパラメータも、 - (id)initWithObject:(MyObject *)object { : myObject_ = object; : } とやって保持すればオッケーってことですかね。
自分はドキドキしながらそうしてる。 調べてもリークしたり捨てられたりはしてなさそう。
ということは、今までメモリ管理の簡便化のためだけにわざわざプロパティにしてたようなものも、 メンバ変数にするだけで、メモリ管理を意識しなくてもいいってことですかね。 こりゃ楽ですね。本当に外部に公開したいものだけプロパティにすればいいんですよね。 delegate みたいな今までassign してたようなものは、__weekをつけたり、プロパティでweekにして やればいいんですね。
__weakね
あぁ、weakです、weakです。weekじゃないです、weakです。す、すみません。
無名カテゴリでプライベートなプロパティ作れるよ モダンランタイムならインスタンス変数もいらないから、ヘッダからは完全に隠される
>>916 ARC を使わないならそうだけど、「メモリ管理の簡便化のためだけにわざわざプロパティにしてた」ってのはプロパティの本来の目的ではないからね。
>>917 それやりまくったらデバッグし難くなって後悔した。
Objective-CもこれでちょっとだけJavaの域に近づいたな。まだまだだけど。
weakにすると破棄された時にnilを設定してくれるから、余計なトラブルの種が減っていいな。
>>919 なにをもってそう言っているのかわからんが流れから言ったらARCか?
見当違いで恥ずかしいですぜ
NSString型のプロパティって、本の真似っ子でよく考えずに、copy で宣言してるんですけど、 あえて、retainで宣言した方がいいケースってあるんでしょうか?
NSStringのプロパティにはNSMutableStringを設定できる ということはretainだとプロパティのオーナーが知らないうちに内容が書き換えられる可能性がある NSStringに限ったことじゃないけど、NSStringはメモリ上でも大した量にならなさそうだからな でも、俺はなんかもったいないwからretain使ってるけど
ああ「あえて」ってのは無いんじゃないの 文字列はその中身が必要であって、インスタンスを共有とかコピーされたら本来の動作はできないとか無いだろうから
>>923 あぁNSMutableStringのことすっかり忘れてました。なるほど!
>>924 あまり気にしないでよさそうですね。ありがとうございます。
ループの中とかで大量に処理するときはretainの方がいいのかもしれないですね。
>>925 NSString などの immutable なオブジェクトに対する copy は実際には retain が実行されるから、メモリ消費は気にしなくていいよ。
あら、そうなのっ?改めようw 間接的だがお礼申し上げます
>>926 え、そうなんですか。かしこいんですね!
ということは、通常はcopyで問題なさそうですね。
勉強になりました! ありがとうございます。
テストした。なんか感動したw賢いねえ
ARC便利だな。もうiOS5未満は切り捨てちまおうw
weakを諦めればOS4以前でもARCは使えるよ
マジで? でもそれこそおっかなびっくりだな。
この言語ムズ過ぎ。頭ハゲそう
むしろ毛がわさわさ生えてくるレベル
ARC便利なんだけど、昔の非ARCのコードの保守とかする時にやらかしそうで怖いw
ARCってiOSが管理してるんじゃなくて、App単位でARC機能がbuildに組み込まれるイメージ? 言いたいのはiOS4で走らせてもARCはAppに実装されるのでARCが動くかどうか?ということです
ARC便利そうだけど踏み切れないな。なかなか
ARC自体はコンパイルするときにコンパイラがコードを仕込む。 ただしweakはランタイムのサポートが必要。だと思った。
940 :
937 :2012/02/21(火) 23:08:17.40
>>938 俺もなかなか踏み切れなかったけど、
新しいプログラムで思い切って使ってみたら
便利すぎワロタって感じだったよ。
でもweakはまだ活用してない。
strong >>>> 越えられない壁 >>>>>> weak
みんなこの言語どこで覚えた? 書籍だと相談相手もいないで、1人で覚えるしかないよね。仕事で覚えるが1番いいのかな?
そんな奴、仕事で使いたくねえよ。
自分は業務系SEだけど、Objective-Cなんて仕事ではやらないので 書籍で覚えた。 あとググるか、2chで聞くぐらい。
Objective-C覚えたらSchemeやらなくていいかな? よくScheme覚えたほうが良いとか言われてるけど 両方覚えるのは辛い
schemeは覚えなくてもいいとは思うけどやったらやったで世界がひろがりんぐだよ obj-cとは全然違う世界なのでやっても損はないと思う ただし仕事に使えるかというとまず使わないねw
その2つは並べてどちらにしようか考えるものではない
schemeはループは再帰で表現するんだぜ。 なんというか根本的に違う感じ。
>>943 自力
もともとはCocoaでMacのソフト作りたくて始めた
最初見た時は何じゃこりゃって思ったけど、使ううちに慣れた
Javaはすでに経験あったから、オブジェクト指向の部分では苦労しなかった
こういう事はtwitterで有名なObjC使いにメンション送りまくったりして聞くのが良い 俺を含めこんな所に来てる雑魚の勉強法なんて聞く価値もない
あまりレベルが違いすぎると参考にならんけどな
教えてくれる友人がいたら1番いいんだろうな。
聞かなきゃできないって時点で才能ないよ
才能とかイラネ
俺は元から天才だしw
ドカタやるのに才能など必要ない
才能に頼ってる時点で見込みないよ
959 :
946 :2012/02/24(金) 11:44:43.79
すみません SchemeじゃなくてSmalltalkでした(汗 Schemeだと質問が意味不明でしたね
目的がないなら両方いらね
>>959 Smalltalkって話は聞いたり読んだりするけど、実物は知らない
なに?いま流行ってるの?
Objective-Cでいいんじゃないのお
962 :
946 :2012/02/24(金) 22:34:24.28
>>961 Objective-CはCとSmalltalkを組み合わせて作ったそうなので
多少違うにせよObjective-C覚えたらSmalltalk覚えなくても
いいのかなと思ったわけです
頭悪そーな発想だな
Smalltalkも紆余曲折あって複雑になってるからねぇ 今でも非営利なら無料でダウンロードできると思うよ どうしてもってんならcincomでググれ
MacやiOSのプログラミングをするなら学ぶ理由は大いにあるけど 言語としてはすでに終わってるものだからな どうあがいてもこれ以上普及することも無いしな
言語自体の発展は殆どないかも知れんが普及云々で言えばappleの頑張り次第
Smalltakeの話をしてることろに割り込んできた >966 はどの言語の話をしてるの? >967も
>>966 自分が出来ないからって終わった言語にするな。終わってるのはお前の小学生並の頭だよ。
お前等のその必死さでこれの現状がよくわかる。
特定目的向けの言語なんて、べつに流行る必要もないと思うけどな。 どこもかしこもobjcになったら、それはそれで困るわ。
誰もそんなこと言ってないと思うけど?
ああ
>>966 はSmalltalkのことだと思ってた
なるほど、Objective-Cのことを言っているととれないこともないな
まあ仮にアンチがいるんだったらそれはそれで注目されているからいいじゃんw
>>972 >>966 ,967,969,970
この変の流れに対してだよ。
そんでもって、MacやiOS向けの言語としては、もう十分に普及してると思う。
>>974 すまんす
「すでに終わってるもの」ってことからSmalltalkだろって俺は思ってたんだけどな
仮にアンチだとしてこんなとこに飛び込んでくるアンチなんて相手にしなくていいのになあ
976 :
966 :2012/02/25(土) 19:31:49.37
もういいや、コード書こうぜ
終わってるっていうけど、ここ最近けっこうな勢いで進化してるよね。 見ててちょっとわくわくするくらい。
978 :
976 :2012/02/25(土) 19:33:23.55
あれ、なんで俺の名前欄に966なんて入ってんだ…別人です
そういうの白ける
エラーが分かりづらい仕様を直さない限りマイナー言語のままだろうな
その辺はJavaや.NETを見習ってほしいわな
Appleは言語の普及とか考えてないだろ Appleに何を期待してるんだ?
普及は考えてないにしてもエラーをわかりやすくしてほしいものだ
llvmなんだから。llvmやgccはこんなもんじゃないの
C#やJavaのエラーも分り易いとは思えないけどな。
分かりやすい分かりづらいが単に日本語で出ないだとかだと笑わす
分り易いエラーってあれか、 ここがこういう理由で間違っているので、ここをこうしてこういう風に修正してね♥ って感じか
そこまで言われると鬱陶しいw
clangのstatic analyzerはそれぐらい言ってくるぞw
スタックトレースのこと言ってるんじゃ? 違うか・・・
エラーが起こったクラスくらいは表示してほしいわ 毎回mainに飛ばされるしイライラしないか?
それはデバッガーの問題じゃないのか それは特に Xcode 4 のデバッガーがタコになった/表示がわかりづらくなっただけじゃないのか
993 :
デフォルトの名無しさん :2012/02/27(月) 16:54:32.83
>>991 それはデバッガの使い方を知らないだけ
言うべきは「objcどうにかしろ」じゃなくて「Xcodeどうにかしろ」だな
実行時エラーの話かよ! NSZombieEnabledとMallocStackLoggingとNSDebugEnabledは有効にしてんだよな?
>>989 Xcode 3 でちょっと使ってみただけで使ってなかったけど、Xcode 4 で試してびっくらした
鬱陶しいわっ!w
よっぽどイレギュラーなコード書いてるんだろ。
analyzerが後でごにょごにょ動くのが別にいらんってだけだけど 有用性は別に否定してない
self = NULL;
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。