Objective-C [ObjC part:7];
Windowsでどうにかして開発する方法をおしえてください
>6 GNUstep
最近のDelphiってiPhoneアプリも作れるんだな。スレチだけど。
なるほど、MONO経由か
>>7 入れてみたけど何か動かなかったしアプリが作れるわけじゃない見たいですね
お前には無理。
Mac買うのが苦痛
それmac miniでしょ? macっていまいちよくわかんないけどmacを買わないと開発できないんですよね? macとmac miniって同じ何須加?
>>15 mac miniもMacだよ。
iMacもMac book もMac ProもMac。
今俺が開発してるのもMac mini。
Mac miniには通称梅・竹・松のエディションがあって、
俺は松(Server)を使ってる。
梅が一番安い。メモリも自分で簡単に交換出来る。
HDDの換装は、分解する作業が必要になる。
同じ何須世路死苦 PCでMac miniの筐体と似たようなのあるだろ?あれも普通のPCだろ。そゆこと
18 :
デフォルトの名無しさん :2012/02/28(火) 08:54:53.72
しっかしCoreDataとか逆に分かりにくくなってるような気がするんだがなんの為に作ったんだろうな 挙動が不安定だし使ってるやついないだろ
ipad3くるぞーー
逃げろーー
ホンマ糞言語だなこれ 勝手な処理多すぎだろ 素直に出力しろやクズ
勝手な処理って例えば?
多すぎと言う程処理系無いしね。
荻原本ってどうなの?読んどいた方がいいの?
うん。
そりゃ読まないより読んだ方がいいだろ
世の中には読んだら害になる本もあるから警戒するのもむべなるかな
Obj-C糞とか言ってるやつは、理解できないやつか、 嫉妬してるやつだけ
俺はObj-C糞とか言ってるやつ(
>>23 )が理解できないけどなw
32 :
デフォルトの名無しさん :2012/03/04(日) 12:35:18.83
Objcに関して質問です。 @selectorで指定されるメソッドの引数がどのように確定してるのかご指導ください。 addTarget等で指定されたメソッドの第一引数は何故かaddTargetのメッセージを受けたオブジェクト自身が格納されます。 第二引数以降があるメソッドに任意のオブジェクトを引数で渡したい場合はどうするんでしょうか?
@selectorを使うメソッドによる。addTarget云々はあなたがそうしているからそうなっている @selectorのメソッドを呼び出したいのなら、performSelector: のバリエーションを見るといい addTarget云々ということは、addTargetで指定したアクションメソッドに追加で引数を与えたいとかなんだろうけど、 - (IBAction)actionMethod:(id)sender は決まり事なので、無理です
34 :
デフォルトの名無しさん :2012/03/05(月) 09:58:49.97
この糞言語エラーが分かりにくすぎるわ いらん時間取られるしエラーになるならきちんとどこがエラーなのか表示しろと。 ゴミ以下だな
馬鹿には無理
それは言えてる
/ ̄ ̄ ̄ ̄~\ / \____ \ | | | | /\ | `/ \______/ | / ∠__ __ヽヽ |ミ≦ヒOソヽ /ヒO≧彡| |i | | / ノ || 人ッ) | // / | ト-< ニ´/(_) ||⌒\_/ヽイ || ミ| ノ||`ー――-"  ̄ヽ |/ |
それはメーテル
>>34 身の丈を知り、時には諦めることも大切だよ
Apple「馬鹿にはアプリが作れないから審査が楽だわw
>>34 Xcodeならエラーはきちんと表示されるけど。
>>34 残念ながらこの世には、すでに数万、数十万というiOS appが
Obj-Cで書かれリリースされているのだよ。。
そういう勝ち誇り方はやめようぜ。一応技術系の板なんだし。
でもそれだけの人数が理解してきっちりプログラム書いてるのにそれについていけずに悪態つくなんて、ねえ… とは思うわ
使用人口と言語自体の良さは比例しない
はいはいついていけないんだから諦めましょうね
>>46 このスレはObjective-Cのスレですが
CやC++やJava(やC#?)は別にスレがあるのでそちらへどうぞ
エラーがでます!っていってエラーの内容を書かない人は技術系の板には来ないでほしいな
どうせ、作り話か、エラーが出たらすぐ投げ出しちゃう根性なしとみた
4.2以降、初心者向けに変わってきた気がする。
どこでエラーが出るかは書いてない 種類は出るけどな これが糞言語と言われる所以
いつものヤツとしか思えない。そしてやっぱり
>>35 ,39だなとつくづく
どうして馬鹿は自分を上においてもの言うのかな。まあだから馬鹿だと周知してくれているんだけど
デバッグオプションもつけず標準のまま使ってるんだろ。
馬鹿にも優しいお前にあこがれるw
>>54 >>39 です
諦めという選択も時には必要だという一般論を言っただけです
この言語もう進化しないの?
Obj-C 2.0 以降、最近のARCやら着々と進化し続けてますが?
最近やっと進化する気になったという感じ。
Xcode 4 に慣れてソース書いていたら、Xcode 3 でエラー出て嫌になっちゃうよね
Xcode3使う必要なんて無いじゃん
OSX, iOSの開発環境は、すぐ前のものが陳腐化するよね まあ、それくらい変化が速いってことなんだけど
>>64 世の中には古いのをメンテナンスしなければならない人、古いOSにも対応したのを書かなければならない人もいるのだよ
>>65 全ての人がそれに習ってくれればいいのに、意固地な人もいるw
Xcode 4 使ってて、Xcode 3 使うとなんかキビキビしてたりする。Xcode 2.5 は何もやってないのかってぐらいもっと速いけど
Xcode 4 使ってて、Xcode 3 使うと、なんか古って思う俺もまた別にいるけどw
Xcode 4.1 →Xcode 4.2 もえらい変わったべや
@リテラルきもすぐるw @//正規表現リテラルもはよw
>>70 なんかいろんな言語スレに張ってるな。広告収入目当てか?
MONOからはかなり遠い位置にいるかと
73 :
デフォルトの名無しさん :2012/03/22(木) 16:00:18.84
この糞言語まだ存在したのかw 過渡期にあるからか知らんが仕様に一貫性がないのに嫌気がさしてやめたわw まあiphoneアプリバブルでかなり稼がせてもらったしそこは感謝してるが二度と触りたくない言語 ついでに未来もない
74 :
デフォルトの名無しさん :2012/03/22(木) 16:08:48.85
日本語訳: iPhoneアプリでごっそり稼ごうと思ったにさっぱり儲からなかった。Objective-Cが糞言語のせい
要約: あのぶどうは酸っぱい
根本的に仕様は変わってないのに 新しい機/仕様が加わっただけなのに 新しい機能/仕様を使わなくてもいいのに。使わなかったら書く量が増えるだけなのに gcc (C,C++) なんて(メジャー)バージョン上がる毎にエラーてんこもりになるのに かなり稼がせてもらったしというほど理解もなにもしてない、ましてやこんなスレに書くほど書き込んでいなく挫折した、初心者に毛が生えた程度のヤツの戯れ言
×使わなかったら書く量が増えるだけなのに ○使ったら書く量が減るだけなのに 新しい機能/仕様の派生理由からすれば
開発環境がカオスなのは認めるが、デベロッパーがその程度で根をあげているようでは話にならない。
ソフトウェア(コンピュータ)界隈なんて日々変わっているようなものなのに、ついていけなくて文句を言うエンジニアwって多いよなあ
>>71 >>70 を見てみたが、アンチ臭がちらほらと。そんな文面無い方がここに貼るんだったらいいのにw
素晴らしいらしいからどれだけwikiが充実するか見物ですね
2個目の宣言で、エラーが出るのですが、 どうすれば2つとも実装できるでしょうか? - (void)popoverControllerDidDismissPopover:(UIPopoverController *)mPopoverController { } - (void)popoverControllerDidDismissPopover:(UIPopoverController *)mPopoverController2{ }
自己解決しました。
>>81 自己解決したとしても。。
引数名だけ違い(セレクタが同じ)のオーバーロードはできません
が理由でしたとちゃんとシェアして欲しいなぁ、後進のためにも
>>83 すみません。出来ない仕様だったんですね。
ひとつのソースでif文で分けることで解決しました。
>>84 Objective-Cに限らず、オブジェクト指向言語は基本そうだよ
メソッド名が同じの場合、引数の数がちがうか、引数の型がちがってなければいけない
まあ、Objective-Cの場合は、引数の数が違うと:の数も違うから、
メソッド名(セレクタ)も異なってくるけどね
ごめん Objective-Cは基本的にメソッドオーバーロードはできないわ あくまでセレクタが異なってる必要がある Objective-Cの仕様上、引数の数が違う場合は:の数が異なるので これを他のOOPにおけるメソッド名が同じで引数の個数が違う メソッドオーバーロードと同じとみなせば、 これに限っては事実上できることにはなる
たとえばこんなの - (void) setValue:(int) arg_x : (int) arg_y : (int) arg_z; - (void) setValue:(int) arg_x : (int) arg_b; 上のメソッドのセレクタは@selector(setValue:::) 下のメソッドのセレクタは@selector(setValue::) ただ、普通は - (void) setValueWithX: (int) arg_x Y: (int) arg_y Z: (int) arg_z; - (void) setValueWithX: (int) arg_x Y: (int) arg_b; のような感じで各引数のキーワードを入れこんで命名するから 上のメソッドのセレクタは@selector(setValueWithX:Y:Z:) 下のメソッドのセレクタは@selector(setValueWithX:Y:) のように明らかにセレクタが違う感じになる なので、結局メソッド名が同じメソッドをオーバロードしていないという ことがよくわかると思う
あー、我ながらわかりにくい説明w
変なの出るから変なの湧くw
>>89 そうだよ
引数名のみ違う状況だから、Obj-C以外でもオーバーロードにならないね
って話だよ
かつ、Obj-Cではオーバーロードがないから、かりに引数の型変えてもダメだよ
というお話
ObjCの@implement内に -(void) foo { Object<0>::CreateInstance( * activeDeviceInfo ); } と書いたら、リンク時にエラーが出てしまいます。 Objectは template<int i > Object { ... }; と定義しています。 ObjC++の制限に引っかかってますか?
>>85-89 m(_ _)m ご丁寧に解説ありがとうございました。
>>90 popoverの処理なんですが、
2種類のポップオーバーを用意していて、
それぞれ別の動作をさせたかったんです。
if文で判断できるのでひとつのソースで済んだのですが。
>>94 いつの間にか C++ の template は関数の引数と同じように使えるようになったのか
実クラスで置き換えるというのでしか使ったことないなあ
>>94 template<int N>
class TheObject {
public:
int myValue;
static
TheObject *CreateInstance( void ) { return new TheObject( N ); }
TheObject( int initValue ) { myValue = initValue; }
};
で
-(void) foo {
TheObject<0> *object = TheObject<0>::CreateInstance();
NSLog( @"%d", object->myValue );
delete object;
}
で、問題無くリンク/実行できたよ
Objective-C++ 側のファイル名を .mm にしてる? .m なら単なる Objective-C、.mm にして Objective-C++ だよ
これやるにはCやっといたほうがいい?
>>98 出来ればCの知識もあったほうがいい。
Objective-CはCが土台だから。
いきなりCはアレだから、まずはキスからだな
www エロw そういえば「初めてのC」とかいうふざけた名前の参考書があったね。
初めてのCは微妙だったぞ やさしいCで入門して、ポインタを詳しく書いてる本を別に読む方が良い
穴が3つあるから間違えないように気をつけろよ
CならK&Rだろ
K&Rスタイルはもう古いよ
今は何スタイル?
C++11
他に使える言語があるのなら、ブライアン・カーニハン、デニス・リッチーの「プログラミング言語C」はお勧め。
>>105 K&Rは説明の簡潔さと練習問題の秀逸さが売り
コンピュータの基本構造知ってれば、初心者でも十分読める
が、今時コンピュータの基本構造理解してる初心者は居ない
最初がK&Rはハードルが高いが、K&Rが読めないうちはまだCを理解してるとは言えない。
最近は(レーザー)ポインタという同じ名称で同じ役割のものがあるのに C言語のポインタが分からないってどういうことなの?
配列とポインタというまるきり違うものが同じ扱いができる場面があったりすることで混同することに尽きるんじゃないの
>113 objcでそんなことする場面はほとんど無いから無視して良さそうだね ... iOSは弄った事ないけど生でbitmapいじり倒したりが当たり前とかないよね?
仕事で使ってない趣味だけだったら、どうでもいいよ 仕事でなら使えないヤツと思うけど
>>115 仕事としてたら偉い人みたいな言い方はどうかと思うよ?
そもそも、どうしてポインタが分からないのか?って話を聞きたかっただけだし
てか、Objcを仕事で使うとポインタと配列を混ぜて使うのが当たり前になるの?
それもどうかと思うけど
>>116 別に偉いってわけじゃないよ。仕事として使うなら他人に読まれるってことだよ。読まれた時にスキルは自ずと判断される。意識的にも無意識的にも
配列をポインタでってのは、極めて普通のことだけど?混ぜて使うとか意識しないで使う
Objective-C でというより、C でね。もちろん、Objective-C は C だし、C の配列を使う機会はあまり無いけどそれは別の話
他人=自分以外
>>116 例えばさ、
char array[100];
と
char *array = (char *)malloc( 100 );
は、同じじゃないとめんどくさくない?上は char[i] でしか使えなくて、下は *(char + i) でしか使えなかったら
たぶんこういうのは、割と普通に下も char[i] でも可能ってのは理解できるんじゃないかなあ(お前じゃなくて一般的にね)
俺は、なるほどなるほどって理解したつもりでいたら、いきなり **p って出てきて、なんじゃこりゃ??としばし悩んだ口だな
初心者がポインタでつまづくのはポインタと配列を同等に扱うのが混乱するからなら、 そんなことはめったにしないObjective-Cではつまずくことはめったに無い って事で良いんじゃないの? わざわざポイインタは覚えないと駄目!とかいう必要がないような気がするんだけど
>>119 char[i]
*(char + i)
って、なんなんねんっ。array[i] 及び *(array + i) ね
>>120 俺もそう思うけど、
たぶん、インスタンス自体がポインタだし、NSError の受け取りなんてほとんど、ポインタのポインタだから基本だろってことなんじゃないの
まあ、ポインタってわからんけど、インスタンスの受け取り用の変数っていう理解だけでも使えるんだろうけど
また、Core は自ずと C の世界だし、他の C のライブラリとかもあるし、ポインタを理解して身につけたら、いろいろ広がるんじゃないの (iconv なんてちょーかっちょいいじゃんw)
と、思うけど、初心者にいろいろアレコレってのも、何をどうどっちを先にってのはわからんね
>>121 (レーザー)ポインタ的な使い方は理解できるらしいから
ダブルポインタだろうとトリプルポインタだろうと問題ないと思うよ
ポインタが分からないなら、アセンブラ(COMET IIのCASL II)をやっとけ。 アセンブラやればポインタなんてこんな簡単なものなのに何で今まで悩んでいたのが馬鹿らしくなれる。
>>124 同意。アセンブラ覚えてからCをやったから、ポインタの理解には苦労しなかった。
ポインタで困るのはポインタまわりの演算子の優先順位だろう。 カッコつけ過ぎのみっともないコードになっても構わないなら関係ないけどw
>>126 見た目の格好良さよりも、見た人が正しく理解出来る事を優先してる。
ObjC環境だと昔書いたCソースをObjCでブリッジ書いて流用する事も可能そうだけど 実際それやって嬉しい事があった人っているのかな
>>128 WebkitはC++のコアをObj-Cでラップしたものだし、Foundationの多くは
CのCoreFoundationへのブリッジだよ。
>>129 Core Foindation はむしろ、Objetive-C のオブジェクトを C から扱えるようにしたものだと思う。
>>129 すんません個人レベルでの事例を聞きたかったのです。
つまり20年前に趣味で書いたコードがObjCが流行ってるのを機会に掘り起こしてみたら
案外あっさり動いてビビったとかそういう事例
Apple環境の裏はほぼCorC++である事はデバッグしたらすぐ分かるので承知してます
Windowsアプリ全盛の頃書いたアプリでも、MFCとかとPureCコード綺麗に分離してたらiOSでもあっさりうごいたわwww とか聞けると上手な設計を追求する励みになるんと思っての質問ですた
>>132 gcc のバージョン上がるだけでたくさんエラー出るから、どうなんだろうな
Pure C だったらさほどの労力で流用できるだろう。hello world はいまだ hello world で動くしなw
(C の標準関数はバッファーオーバーフローを回避するというの以外は全く変わってない)
しかし、OS 依存のコードが大部分で Pure C に分離できるものは微々たる量でしかないのは、Windowsでも書いたことあるならわかるでしょ
>>132 他人を追求したいならお断りだ
自分で上手な設計を追究したいんならすればいい
がんばれよ新人
仕事でプログラム組み出すと分かるけど
三ヶ月前の自分は他人、上手な設計を心がけておかないと死ぬよ
>>133 同意。
特に.NET導入で大きく変わったなと思う。
.NET?どこの誤爆だろ
だな。Java で Perl でとかと変わらん全く別次元のことだもんな
138 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/05(木) 08:50:46.18
iPhoneでObjective-Cエディタとか使ってる?
使ってない。
140 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/05(木) 17:26:30.33
Objective-Cのクラスはプログラムに組み込まれた小さなインタプリタで動いてるって話を聞いたのだけど本当? 原理はJavaVMに似てるって話だけど
>>141 それは.NETじゃないの。吐き出されるのは中間コードとやらでってのは。C#はネイティブも吐き出すことできるんだっけ
Objective-Cはネイティブコードだよ。メソッドの呼び出しやクラスの実装が動的ってだけで、バーチャルマシンとは全く別もの
確かに吐きだすバイナリは確かにネイティブコードだがな そのコードがインタプリタ的な動作をするってだけ
メソッドの呼び出しがでしょ まあ、メソッドの呼び出しがコードのほとんどを占めると言えばそうかもしれないが
どうもインタプリタ的と言うのに違和感があるのは、メソッドの呼び出しにクッションを置くのは、特に変わったことじゃない。CPUレベルでの割り込みベクタとか まあ、単なるジャンプテーブルじゃないってのはわかるけどね
まあ一般の解説ではメソッドの呼び出しポインタが動的な点をインタプリタ的と言ってるな .NETは最初に全ての中間言語をネイティブコードに変換して実行する 初期実行は遅いけどネイティブコードのアプリと同等程度の速度を実現してる 中間言語を読みながら実行するJavaとはまた違う
.NETはなるほど。なぜにわざわざ中間言語なのかはスレ違いでもあるから聞かないでおこうw JavaもJust-In-Time Compilerってあるよねえ
.NETはもともとJavaに変わるマルチプラットフォーム環境を目指してたから中間言語を採用してる 通常、実行環境が固定されているObjective-Cには無用の長物 JavaのJITコンパイラは.NETの実行方式と同じ発想のものって認識でいいと思う
あ〜もうスレ違いだね そろそろやめとく
やっぱ似ているのはそっちということでw
Apple公式の日本語和訳「スレッドプログラミングガイド」
154 :
デフォルトの名無しさん :2012/05/06(日) 02:14:19.99
>>153 簡単に言うと、「スレッド間通信を行う低レベルな方法」です。
「スレッドプログラミングガイド」を参考に自分で
RunLoopSourceクラスとRunLoopContextクラスを作ったんですが、
このクラスをどうイジれば何がいい感じになるのかさっぱりです。
なんとなく、ランループの状況に応じてコールバック関数が呼ばれるんだろうな
ってとこまではイメージできますが、もっと具体的な使い方を知りたいです。
誰かお暇な方いたら自分が作った下記の3ファイルを使って何か
サンプル作ってもらえないでしょうか?
AppDelegateクラス。入力ソースの登録、解除をするっぽい。
RunLoopContextクラス。コマンドバッファの管理とランループの連携を行うらしい。
RunLoopSourceクラス。純粋に単なるコンテナオブジェクト。
http://upload.saloon.jp/src/up5313.zip.html
156 :
デフォルトの名無しさん :2012/05/09(水) 19:24:36.04
>>155 サンプルを作ってみた。(↓このURLは2ヶ月以内に自動的に消滅します^^)
http://homepage.mac.com/stripe/EchoThread.zip MacOSX10.7用のコマンドラインツールです。
MainスレッドからWorkerスレッドへMessageを送信すると、
単純にそれをMainスレッドに送り返してきます。
Appleのドキュメントのコードだと、MainスレッドもWorkerスレッドも同じオブジェクト、
という構成になっているっぽくて俺的に分かりづらかったので、クラス構成は変更しています。
157 :
デフォルトの名無しさん :2012/05/12(土) 05:19:28.18
NSRegularExpressionについての質問です @"\\s" や @"\\w" といった正規表現のメタ文字を含むパターンをマッチさせたいのですが "\\s" という文字列そのものとして扱われてしまっているらしく、メタ文字として正しく機能してくれません メタ文字を正しく機能させるにはどうすればいいのでしょうか? コード: NSRegularExpression *pattern = [[NSRegularExpression alloc] initWithPattern:@"\\s" options:0 error:&error]]; NSString *subject = @" --\\s"; [pattern firstMatchInString:subject options:0 range:NSMakeRange(0, str.length)]; 結果: <NSSimpleRegularExpressionCheckingResult: ...>{3, 3} (空白の位置ではなく、"\\s"という文字列にマッチしてしまっている)
うわああ Macだと\とバックスラッシュの文字コードって違うんですね 自決しました
160 :
デフォルトの名無しさん :2012/05/12(土) 11:30:43.73
「Macだと」というかUTF-8だからかも
エディタの文字コードの設定でコンパイルうまくいかないのはよくあること
バックスラッシュは option+\ を押すと入る
163 :
デフォルトの名無しさん :2012/05/14(月) 19:20:22.21
俺は、ことえりの設定で\をタイプすると、デフォルトでバックスラッシュになるようにしてる。
80文字で終わらないのが気持ち悪いので マクロ多用で俺様言語にしてもいいですか? #define AlocInit(T) [[T alloc] init]; みたいな
あなたしか使わないのだったらどうぞお好きに 俺とかかわる人だったら殺すw
俺はだいたい80カラムにおさめてる。
今時80カラムとかTerminalでさえそれ以上にできるのに。というのは置いておいて 俺は全く気にしないな ステップ単位で追うのにその行がなにをやりたいというのがわかればいいので、ゴテっと分けられると追うのに邪魔。その行が具体的に何をってのは追うのにそれほど重要じゃないからなあ もちろん具体的に何をって知る必要もあるのは当然でその場合はその行だけに注目しているのだから、横スクロールするなりするのは苦痛ではない とか言ってみる
一行にだらだら書くと自分でも何を言ってるのか分からなくなる例がこちら
>>167
横方向にウインドウ並べて見比べたい質なので。
文をちゃんとまとめて書いたとは言わないけどな 後で自分で見直したりとか、ソース追うのに毎回毎回いちいち引数とか注意しているの?なるほど、そういう人もいるんだな 俺は、流れを読むのにとりあえず必要としないし、一度注目して理解したのはとりあえずある期間は憶えているので、毎回毎回その行を見るのに引数に注意する必要無いからというのだけどな
>>169 ああ、Xcode 4 になって一つのウィンドウで全てってなら尚更だよね。そういうのならわかるわあ
なのでXcodeにしろVisualStudioにしろ、 最近のタブ強要みたいな流れはうれしくないデス。
>>172 タブはワークスペースの切り替えとして使うと割といけることに最近気付いた
- { id <ESRenderer>} init すいません。サンプルコードのみてたですが、上のコードはどういういみなんですか? よくわかりません。鍵括弧ってどういうこと?
カテゴリ
ウホッ
>>174 ESRenderer っていうプロトコルを実装しているインスタンス(を返します)
>>174 よく見たらその文法は初めてだなw
ググっても、ないよーっ
- (id<ESRenderer>)init ならいっぱいあるw
微妙にホッとしている俺がいる
181 :
155 :2012/05/15(火) 21:50:08.04
>>156 ありがとうございます!!今DLしました!とうかレス遅くなってすみません!
2日ほど待って諦めてて今日思い出して久しぶりにこのスレに来ました!
本当に助かります!早速確認します!ありがとうございます!
singe view applicationのテンプレートで作ったのですが appDelegateで起動時に呼ばれるのは - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. return YES; } となっています、テンプレートと同時に作られるviewControllerファイルにあるViewControllerのクラスはどこで呼ばれるのかわかりません。 xcode4.3でストリーボードありを選択してつくりました。 viewControllerのクラスはどこで呼ぶように定義されているのでしょうか? 気になって眠れません。
Objective-Cって設計思想でぬるぽが存在しないってことなのかな nilへのメッセージ送信が可能で プロパティがゲッターセッターの自動生成だとすると
∧_∧ ( ´∀`) にるぽ
186 :
デフォルトの名無しさん :2012/05/26(土) 13:17:39.52
>>184 Objective-Cにも、値がゼロのポインタ値は普通に存在する。
ヌルポが存在しないのは、OCamlのほうだ。
ぬるぽいんたえくせぷしょんはObjCには存在しないよ ぬるぽはあるけど
Javaにはポインタが存在しないはずなのに ぬるぽが発生するのは何でJava
存在しないと誰が言った!
吉永先生
192 :
191 :2012/06/02(土) 22:33:16.68
すみまぜん
>>191 はスルーしてください。。Headerdoc使うのやめようと思います。
ちなみにみなさんどのドキュメントツール使ってますか?
今からappledocいじってみます
193 :
デフォルトの名無しさん :2012/06/03(日) 17:11:42.27
なんかダウンロードしろってゆわれたからダウンロードしようと思ったら 英語でぜんぜんわからんわ。 詐欺師 金返せ
とりあえず、大笑いしてあげよう 満足したか?
195 :
デフォルトの名無しさん :2012/06/03(日) 21:07:21.67
そんなんで満足するわけねーだろ!クソが 笑いなんて要らねーんだよ。 普通でいいんだよ。贅沢は言わない。普通で。 iphoneの開発はしたいから本買ってきたらアップルのどこかでダウンロードしろって書いてあったから しようと思ったら英語でわからんかった。 お前らはどうやって分かった? 英語できるやつばかりか?
少なくとも、あると分かっているものを探せる程度にはわかる
197 :
デフォルトの名無しさん :2012/06/03(日) 21:22:42.26
>>195 で、何をダウンロードしろって書いてあるんだ?
基本的な開発ツールなら、App Storeからダウンロードできるはずだが
>>195 ダウンロードは英語で download と書かれるのだよ
てか、マジで言っているのか...
マジのはずはねーよなあ。プログラミングで英語必須とは言わないが、逆切れするのはありえないからなあ
大方昔の本買って、ADCから落とすとかそんなことが書いてあったんだろう。
arc4random()って0〜0.999…が返るって認識であってますよね? なんか1億とかすごい値がかえってくるんだけど 原因しってる人いますか?
>>arc4random()って0〜0.999 勘違いでした。 javaのMath.random()みたいなもんかと思ってた!
他の言語の関数と似たような名前の関数なら同じようなもの、と思う癖やめた方がいい。ちゃんと調べるべき Cの乱数生成はちょっと面倒くさいよ。 苦しんで覚えるC言語とかいうサイトに範囲指定して乱数生成する公式が乗ってたかと思う。 応用すれば実数の乱数生成も出来るよね。
203 :
195 :2012/06/04(月) 09:51:42.99
そりゃあ大変だ
>>203 いやいや、スペルぐらいもわからないとしか思えないんだけど
ああ、Downloads は download と同じ意味だよ。ちょっと教えるのが不親切だったね。ごめんなさい
てか、ホームページに詐欺って。いくら搾取されたのかね?もうネタはいいよw
ジョブズになる資格すらって、 そんな資格ある人存在せんわw
俺はそこはネタ臭がひどいので無視をしたw
195は「stay foolish」の実践者なんだろ。酷い馬鹿さ加減だが
209 :
195 :2012/06/04(月) 13:55:29.47
downloadとdownloadsが同じことくらいわかっとるわ
>>203 のリンク先の画像で Xcode and ios SDKって書いてあって
ここをダウンロードって○で囲ってあって
で、リンク先からその場所と文字を探したらその場所にその文字がなく全く違うことが書いてあった。
つまり俺はこのサイトを作ったヤツに嘘をつかれた被害者なわけだ。
stay foolishってなんだよ知らねーよ。
ネタじゃねーよボケ!
嘘だと思うなら見てみろよ
なぁ、俺が何か悪いことでもしたのか?
何でいつもこんなに虐げられなきゃいけないんだよ!
英語以前に日本語も読めてないようだから、お前はもう諦めろ。
>>203 のリンク先に書いてあるようにdeveloper登録はしたか?
そして今はiOS5になってるから、iOS4のその絵とは変わってて当然
212 :
デフォルトの名無しさん :2012/06/04(月) 14:20:36.18
秒進分歩と揶揄される業界で一年以上前の情報を参照してる時点でダメ 英語が読めないのはもっとダメ たとえXcodeが手に入れられたとしても、 「全部英語で意味不明」 「(古いサイトに)書いてあることが出来ない」 と同じ事を喚く事になるだけ 時間の無駄だから他の有意義なことをしたほうがいい
俺は・・・Xcodeにはなれない・・・
>>209 えー? Downloads って書いてあるのに。なんかの記号とか意味わからないアルファベットの羅列だったんでしょ?
普通は Downloads の意味がわかっていたら、そこだなと思うはずなんだけど、そういう普通の感すらが働かないなら、プログラミングなんて無理無理無理
天に召しますジョブズの親切だよ、たぶんw
>>211 Developer登録すら今は必要ないみたい。Dev ページからもダウンロードは App Store に導かれる
プログラムやる上で英語が読めないは致命的だな。
英語が読めないと全行程で10倍時間が掛かる。 そのうち英語が読めるようになるけど。
大雑把だけど、アウトレットは家電製品のコンセントの設置 アクションは設定したイベント(トリガー?)の状態になったら実行されてメソッド•プロパティを実行する って認識でいいの? アウトレットとアクションの配線がいまいちピンとこない••• わかるようなわからないような••• xib上で設置したボタンとかテキストフィールドでただのハリボテとして使う時はアウトレットの配線はしなくていい(コンセントの設置?) ボタンを押して何かしたい時にはアウトレットを配線、アクションも設定って感じ?
>>217 アウトレットは大体合ってる。プログラムの中で使う時に使う。
例えば、テキストフィールドの中身を取り出す為にテキストフィールドをアウトレットで繋いでおくとか
アクションも大体合ってる。
何らかの動作をしたい時に動作と繋ぐ。
ボタンを押して何かしたいだけなら、アクションを繋ぐだけでいいです
IB使うと自作ビュー混在させるときに面倒クセェ。 結局のところ複雑になればなるほどコードで書いた方がいい
がんばれー
>>217 アウトレットは俺のぉ(モノ)
アクションはお前がぁ(やれ)
って、わからんか。俺も何言っているのかわからん
222 :
195 :2012/06/05(火) 06:11:47.46
ダウンロードってやつをしてみたよ。 そしたらよ、名前、住所、職場の名前、Eメールとかを書けってきて、 そのとおり入力したにも関わらずダメだってなったわ。 ふざけんなよ。 俺は嘘偽りを何一つ言ってないわ なのに俺だけやらせてもらえなかった。 ふざけんな 俺が何したっていうんだよ! アップルの嫌がらせか!
223 :
195 :2012/06/05(火) 06:15:22.99
いい忘れてたわ だめだったのはEメールのとこだってよ。 ヤフーのメールアドレスじゃダメなのかよ。 ヤフーだって立派な会社だぞ! ヤフーはグーグルとかと違ってインテリ臭がしない情弱御用達だからダメってか、クソ!
もしかしてインテルMacじゃないとか
>>222 ,223
いままで Apple Store を利用したこと無いのか。てか、Apple ID を持っていないのか。iTunes Store も使ったことが無いんだろうなあ
いい加減アホ真似にも飽きてきたので
>>224 を超えるオチでおオチをつけてくんなまし
×Apple Store ○App Store Apple Store でもあながち間違いではないけどw
227 :
195 :2012/06/05(火) 07:17:12.27
インテルMACって何だよ 仮にインテルMACじゃなかったとしたら、それが原因でobjective-cさせてくれないなんてとんだ嫌がらせだな! アップルのIDくらい持ってるわ
>>227 マジでそれは嫌がらせレベルなんだがマジでそうなんどす。ついで言うとインスコの不具合もそこそこあるらしいべよ
召喚ボタンを押すとランダムな色/形,跳ね返り方の違うボールを出すみたいなことしたいんだけど どうすればいいの? できるだけリアルな感じでやるのが目標なんだ Opengl esっての学べばいいの? Xcode使ってボタンを押すと文字が表示できたら受け取ったり 簡単なrpgはできるようになったけど、まだCuiのRPGと変わらないくらい低レベルだから もっと高レベルなことやりたいんだ
スレチ
Objective-cでできないってこと?
頭をもっと高レベルにしてから出直せ
Core Animation 使うのも OpenGL ES 使うのも他のアプリ使うのも、お前の勝手だろ。 その程度の単純なアニメーションくらい幾らでも方法はある。 どっちにしろスレチだが。とりあえずMac板のiPhone開発スレへ行け。
235 :
195 :2012/06/05(火) 12:58:40.67
俺にobjective-cをやらせろや! クソヤロウ!
>>233 それならobjective-cで十分可能だと思う
OpenGLって3Dを扱いたいときに使うといいんじゃないかな
>>233 とりあえず、まる一個UIViewひとつでCore Animationでやってみりゃいいやん。
それが糞重かったら、まる一個CALayerひとつCore Animationで
それでも糞重かったら、ひとつのUIViewで丸一個一個をCore Graphicsで自分でアニメーション
まだまだ糞重かったら、OpenGLつかって
やりゃいっぱい勉強できるだろう
まあ 、ひとつのUIViewで丸一個一個をCore Graphicsで自分でアニメーションが一番手っ取り早いと思うけど
195は飽きたから
>>234 と言っているが、ここでもいいよw
239 :
195 :2012/06/05(火) 20:43:36.30
プログラムの本質が分かった。 プログラミングとはプログラムを書き、実行することが本質なのではない。 プログラミングを理解できた多少頭の良いと思った自分に対して、 プログラミングを理解できなかった人間に対してククク…とあざけ笑い優越感を得ることがプログラミングの本質である。 いまもこうやって俺のことを笑っているんだろう。 みんなして ククク… と。
>>239 プログラミングどうのこうの以前の話しかお前はしていないだけど、それすらわからないんだから、プログラミングなんて無理無理無理
お前はここに居座るのは笑われるのが目的じゃないの?お笑いの線では無理無理無理というほどではないと思うよ
241 :
デフォルトの名無しさん :2012/06/05(火) 21:19:05.98
>>238 よく見ると実行速度の順番が一部違ってないか?
>>241 ん?Core Animation vs Core Graphics で自分アニメーションでってこと?
>>239 そこまで理解できたら話は早い
後は諦めるだけだ
画面にさ、小さなボタンを用意してさ それをTapしたら下からTabBerみたいのがちょこって出てくるようなの作りたいんだけどどうすればいいのん? こういうのって、クラス?ってのを作らないといけないの? それとも一からマシン語で書くのかな?
うん、一からマシン語だな。当然だろう、しごく当然
246 :
デフォルトの名無しさん :2012/06/05(火) 23:32:46.50
>>242 >それが糞重かったら、まる一個CALayerひとつCore Animationで
>それでも糞重かったら、ひとつのUIViewで丸一個一個をCore Graphicsで自分でアニメーション
Core Graphicsで自分でアニメーションということは、丸を書いて消して、書いて消しての繰り返しになるんじゃないか?
CALayerだと、いちいち書き直さなくても移動できるんじゃなかったっけ?
247 :
デフォルトの名無しさん :2012/06/05(火) 23:36:45.40
>>244 その言葉どおりに作ればいいんじゃないか?
画面に小さなボタンを配置するぐらい簡単だろ?
TabBerみたいなのを表示/非表示に切り替えるのもできるだろ?
あとは、この2つを組み合わせるだけだぞ。
>>246 まあ、消去&描画のくり返しという、やっているのはどっちにしても同じじゃないのかなあ
どんだけGPUに丸投げしての差とかはわからないけど
とりあえず、なんかクラスとして(ちょっと)重そうとかいうのででので、そのへんは適当です
玉をパウンドさせて何が楽しいんだ?
チンポジ修正アプリ
たのしいCocoaとよくわかるiPhoneアプリ開発の教科書[iOS 5&Xcode 4.2対応版] 読んで予め用意されてるCocoaTouchを使って簡単なことはできるようになったんだけど 例えば、画面遷移する時って下からシュピィン!ってでてくるけどこれを真ん中から迫ってくるようにとか したい時とかって出てくると思うんだよね、こういうのってそこまで用意されてない(よね?)し自分でコード 書くしかないんだと思うんだけど、どう書けばいいのか想像つかない っというかコードでそんなことできんのか最近疑ってるレベル UINavigationBarのタイトルを置き換える方法探しても見つからないしメソッドってのを自分で 作らないといけないのかな 考えてたら禿げてきた
>>251 簡単にできるよ。標準のにちょっと手を加えるだけで
とりあえず標準を使いこなして何ができるできないが判断できないとね。標準をそれなりに理解しつくすのがまずは先だね
253 :
デフォルトの名無しさん :2012/06/06(水) 18:18:59.45
>>248 Core Graphicsは100%CPUによるレンダリングだから、比較的遅いと思うぞ
100%CPUってのは無いんじゃないの。そんなには期待できないだろうけど Quartz ExtremeレベルのはiOSでも実装されているじゃないかなあ こんな◯だけのはどっちにしろたいした変わらないじゃないの
CocoaをC++でラップしたみたいな ライブラリありませんか?
そんなのがなぜ必要なの?ちなみにここは Objective-C のスレです。覚えるのが嫌とかは許しません
覚えるのが嫌
CocoaをC++でラップしても、結局Cocoa覚えないと使えなくね?
だよな。てか、ラップされての癖のような変なのも追加で覚えなければならいよな 安物買いの銭失い的なもんだなw
Objective-Cを直接使うよりまし
Objective-C++ってけっこう使うけど、カオスっぷりがなかなか素敵だよw
コンパイル遅くてダレそう
263 :
デフォルトの名無しさん :2012/06/06(水) 20:23:56.70
>>254 CPUがメインメモリにグラフィックを描くのがCore Graphics
GPUがビデオメモリにグラフィックを描くのがOpenGL
描画するバッファ(メモリ)が根本的に違うので、両方を同時に使うのは不可能。
ただし、それぞれで描いたグラフィックを後から重ね合わせるのは可能。
「ひとつのUIViewで丸一個一個をCore Graphicsで自分でアニメーション」
なんてことをやったら、100%CPUで処理する形にしかならないと思う。
> Quartz ExtremeレベルのはiOSでも実装されているじゃないかなあ
iOSには、Window Serverが無いから、Quartz Extremeも無いんじゃないのか?
>>262 そこまで遅くないし、普通はつなぎ目にしか使わない。
>>624 うん。遅いというヤツのマシンスペックを知りたいものだな
>>261 うん。本当に素敵だよなw
CocoaとOGRE とかのデカめのC++ライブラリを併せて使ったことあるけど、 クラス宣言部に C++ クラスおいたら一挙にコンパイル速度低下したから、 早々にObj-C++部を他の.mファイルからは隠したな。 つなぎ目にしか使わないというより、つなぎ目にしか使っちゃ駄目。
>>266 うん、そりゃ通常のと比べて遅いことは遅いよ。でも、毎回全てコンパイルするわけじゃないでしょ?開発サイクル的には全く遅くないけど
俺はめんどくさかったから、すべて mm にしちゃったけどw
ちなみに下手な人の書いたコードはコンパイルにも時間が掛かる。
>>267 ,268
同じく全部Objective-C++でコンパイルしてる。
下手な奴はクラス実装全部含めた全部インクルードみたいなの平気で使うからな。
アホはヘッダーファイルで無駄にインクルードするからな
Xcode使ってゲームとか作ろうと思ったけどグラフィック画像とかまったく無知で描くことできないから詰んだ
詰んでてくれ もうこれから先は自分から解決方法探せる奴じゃないと生き残れない Webにノウハウ上げる奴はほとんどいなくなってしまった(英語圏は別)
>271 は質問のような独り言をあちこちの関連スレに書き込んでる人だと思うよ 選択肢が複数あることが理解できないみたい T字路なのに前だけ見て先に進めないって言ってる感じ
部品を組み合わせることを知らないから、製品を探すことしかできない、と言う感じ
ε ⌒ヘ⌒ヽフ ( ( ・ω・) ブヒン しー し─J
276 :
デフォルトの名無しさん :2012/06/07(木) 13:54:55.32
>>270 Objective-C++はプリコンパイルドヘッダ効かないの?
>>276 プリコンパイルドヘッダの使い方間違ってないか?
>>277 あーすまん。俺はまだObjCよく知らんのだけどC++のライブラリ持っていこうと考えてるんだ
ClangがC++にも対応したって何かで読んだからコンパイル速度は問題ないと思ってたけど
無駄にインクルードすると遅くなるってことはPCHが使えないみたいな弱点があるのかと気になって
>>278 コンパイル速度なんか気にしたことないや。ライブラリなら何度もコンパイルする訳じゃないし、気にしすぎじゃない?
無駄にインクルードする事よりも、プログラムの構成の仕方が良くないせいで、 ちょっと触ったら、あっちもこっちもコンパイルし直すはめになるみたいな話でしょ。 全体通して一回ビルドするだけなら大差ないと思う。
まぁ通は必要に応じてクラスの前方宣言使って、ヘッダで無駄にインクルードはしないわな
>>278 プリコンパイルヘッダは普通に使える。
プロジェクト作ったときに、プロジェクト名-Prefix.pchってファイルが自動手に作られてるだろ。
共通のマクロとか定数の宣言はここに書いとく。 但しこいつを変更すると全ソースが再コンパイルされる。
objective-cでジェネリクスやC++のテンプレートと同じことが出来ますか? 各種オブジェクトならidでそれらしいことができるけれど、プリミティブな型 (例えばintやdouble等)は出来なさそうに思います。
> プリミティブな型 もちろん不可能だよ。
NSNumberをかませればできる。 効率的な事はおいといて。
286 :
283 :2012/06/08(金) 00:11:45.58
ご回答ありがとうございました。 >284 やはりそうですか。確認が取れてすっきりしました。 >285 この方法も面白いのですが、パフォーマンスを落ちてしまうので残念ですね。
メソッドの引数で聞きたいことがあります。 C++ではメソッドの引数の参照渡しがあります。 (void)hoge(int &value) objective-Cでもこのような参照渡しは可能しょうか。 - (void)hoge:(int &)value →参照渡しはNG(コンパイルエラー) - (void)hoge:(int *)value →ポインタ渡しはOK
>>287 Objective-C++ならできる。
>288 ありがとうございます。この資料を探していました。
いや、ゴメン。嘘ついた。289 の言う通り、Obj-C++ なら普通に出来た。 #import <Foundation/Foundation.h> #import <objc/runtime.h> @interface Test : NSObject - (void)hoge:(int &)test; @end @implementation Test - (void)hoge:(int &)test { test += 1; } @end int main(int argc, const char * argv[]) { Test * test = [[Test alloc] init]; int foo = 1; printf("%d\n", foo); [test hoge: foo]; printf("%d\n", foo); printf("%s\n", @encode(int &)); printf("%s\n", @encode(int *)); return 0; } 実行結果 1 2 ^i ^i ポインタと同じ扱いでした。(;^ω^)
292 :
288 :2012/06/08(金) 00:48:07.30
↑のレスは288ね。
>289, 291 まだobjective-Cの知識が不十分なのでobjective-C++を使うのを躊躇していましたが、 objective-C++を使う方が自分のやりたかったことをスマートに実装できそうです。 アドバイスありがとうございました。
使える所はObjective-C++でC++のソースそのまま使えば良いんだよ。 Objective-CのAPIも使えるし、Toll Free Bridgeあるから基本的な オブジェクトもCレベルで互換性あるし。
295 :
デフォルトの名無しさん :2012/06/08(金) 22:02:02.39
>>279-282 遅くなったがありがとう。ObjC++で問題なさそうだね
このスレ親切だなー
297 :
デフォルトの名無しさん :2012/06/14(木) 19:44:04.23
UIKitのプログラムなんだが 似たような画面(UITableView)を複数作るとして 親クラスに基本的なコンポーネントの生成を任せたいんだが デリゲートに子クラス自身を渡す方法について悩んでいる 1. インターフェースでUITableView * _tableView; と宣言してしまい、子クラスから直接 _tableView.delegate = self; と代入 2. デリゲートプロトコルを宣言したid型プロパティまたは セッターメソッドを用意して 子クラスの初期化時に代入(コンポーネント生成前) 3. 親クラスでのプロトコルでdelegate先取得のメソッドを必須にして 親クラス初期化時に子クラスがreturn selfで返す。 どれでも出来たんだけどどれがベストかなあ。 あと3みたいなのってJavaとかだと抽象クラスでフレームワーク的に よく使うと思うんだけどObjective-Cではあまり使わないのかな オーバーライド必須メソッドを親クラスで呼んでコントロールするという
親クラスに + (id)sharedTableView { return TheOyaClass; //的な } でも作って、 子クラスの init (とか)の中で [super sharedTableView].delegate = self; とか。
親クラスのメソッド内でで単に _tableView.delegate = self でいいんじゃないの?? self はインスタンスを生成したクラスなんだから。つまり小クラスであるのだから 親クラスもDelegateプロトコルに準拠だけしておけば何も問題なさそうだけど
300 :
デフォルトの名無しさん :2012/06/14(木) 21:05:27.32
>>298 それってプロパティに近いですよね。
4.2からは実装部だけでインスタンス変数が宣言できるので
なるだけ隠したいというのが発端でした。
>>299 あ、今やったらできました。
以前やったときは子を呼んでくれなかったんだけど
実装ミスだったようです。。。
子クラスでは必要な場合にオーバーライドして
initパターンで最初に親を呼んでから自分の処理実装で目当ての物ができそうです。
メソッドが長いので冗長ではありますが。。。
初心者なんだが Id<Adelegate> delegate;でBクラスオブジェクトでA.delegate=self;、とするとアクセサメソッドでAクラスのプロトコルメソッドをBクラスオブジェクト名義で全部実行て事でいんですか??
[delegate AdelegateMethod:...] と、Aクラス内(でなくてもいいんだけど)で実行され、delegate の AdelegateMethod:... が呼ばれるだけ BクラスオブジェクトでA.delegate=self と事前にしているなら、delegateがBクラスオブジェクトなんだから、Bクラスのメソッド(AdelegateMethod:...)が呼ばれるだけ としか言えない
303 :
デフォルトの名無しさん :2012/06/14(木) 23:41:51.94
>>300 なんとなく思うのだが。
一つのnibファイルを、複数のcontrollerクラス(子クラス?)でロードするとかじゃダメだったのか?
基本的なコンポーネントの生成を任せるために親クラスを用意する必要あるのか?
>>302 事前にA.delegate=selfしてる場合なんですけど、その時はAクラスのADelegateMethodの内容に書かれている内容→BクラスのAdelegateMethodに書かれている内容、という流れになるんですかね??
>>304 ん??普通Delegateを用意している(本当はクラスも全く関係ないけど、とりあえず )AクラスにDelegateメソッド(
>>302 でいう AdelegateMethod:...)は実装しないよ
なので、BクラスのADelegateMethodがAクラスのどこかのメソッドから呼ばれるだけ
また、Bがなんかのクラスの小クラスであっても、親クラスのADelegateMethodが自動的に呼ばれることは無いよ
必要なら、BクラスのADelegateMethodで[super ADelegateMethod:...]を呼ばなければならい。親クラスの処理を先にやりたいならBクラスのADelegateMethodの頭のほうでそれを、後でやらせたになら後ろのほうでそれを
306 :
デフォルトの名無しさん :2012/06/15(金) 00:24:39.03
>>304 Delegateのまえに、@protocolの事は知っているのか?
>>305 うーむ、例えばテーブルビューを使うとなるとUITableViewDelegateとUITableViewDataSource(スペル合ってるかな、、)を使って最低セルの数とセルの内容を決めるメソッドを書かなきゃいけないですけど
その場合はデリゲートを使って数と内容を決めるメソッドをオーバーライドみたいにしてると思ったんですけど違うんですかね??
>>306 なんとなく位なら、、
@protocol 1 [U]外交儀礼;(軍隊・宮廷などの)儀礼, 慣習. 2 条約原案, 条約議定書;補足協約, 協定付随書. 3 ((the P-))(フランス外務省の)儀礼局. 4 《医学》プロトコル, (研究・治療などの)実施要綱. 5 (実験などの)観察記録. 6 《コンピュータ》プロトコル, 通信規約:ネットワークの接続手順. 7 《哲学》プロトコール, 命題(protocol proposition). 8 儀礼上のしきたり, エチケット. 9 Objective-CにおけるJavaのインターフェースに相当するもの
309 :
デフォルトの名無しさん :2012/06/15(金) 02:03:37.79
>>303 IBを使わないでコーディングしています。
親のViewDidLoadで共通部品生成
子のViewDidLoadで
[super ViewDidLoad]
の後に差分のコンポーネント生成とか
入力チェックなんかの共通処理は親でやりたいなと
>>307 オーバーライドじゃないよ。
プロトコルはメソッドの宣言の集まり。元の実装がないのだからオーバーライドも何も元がない。
従ってプロトコルを採用し、実装する側はメソッドをイチから実装する。
>>307 >メソッドをオーバーライドみたいにしてると
うん、違う
メソッド本体はどこにも無いよ。
>>308 にある通りインターフェース(Cで言えばプロトタイプ宣言)だけ
メソッド本体はその例えでいうとUITableViewDelegateやUITableViewDataSourceプロトコルを実装するクラスにってこと
>>310 ,311
今までデリゲートはオーバーライドみたいなことをしていてテーブルビューで言えばプロトコルに準拠したメソッド上のどこかでテーブルビューを作っていたと思っていたんですけど、
あのプロトコルメソッド群は本当に只々数値を返したり引数を受け取って色々したりするだけ(当たり前だけど、、)なんですな。
テーブルビューで言うとテーブルビューオブジェクトはdelegate,datasourceプロパティを使ってUITableViewDelegate,UITabelViewDataSource準拠したメソッドを使って自身を設定してるのかな??
>>312 オーバーライドタイプだとして(そういうのが無いわけでもない)も、自分で実装したメソッドで super でオーバーライドした元を呼んだりしなければ、Delegateメソッドで他に何かをしているとかは無いんだけど
テーブルビューは枠組みを提供しているのであって、ユーザサイド(貴方や俺やテーブルビュー使ってなんか作る人ね)固有と思われるのをUITableViewDelegateやUITabelViewDataSourceで取得、通知しているってのだけど
ユーザサイド固有のデータの取得や、ユーザサイドが必要とするであろうテーブルの変化の通知
韓国の国内総生産(GDP)を考慮した個人負債規模が財政危機に陥っているスペイン並みに深刻な水準となった。
個人負債の増加速度は経済協力開発機構(OECD)加盟国で3位と平均を大きく上回った。
大韓商工会議所が14日に発表した「個人負債現況と政策課題」報告書によると、
2010年の韓国のGDPに対する個人負債の比率は81%でOECD平均の73%より高かった。
これは財政危機を陥っているスペインの85%に迫る水準だ。ギリシャの61%より20ポイント高い数値だ。
個人負債増加幅も急速に拡大していうる。2006年以後鈍化した個人負債増加率は2010年に前年比2.4ポイント上昇の9.8%を記録した。
【今日の感想】この記事を読んで・・・
面白い (40件)
悲しい (2件)
すっきり (1件)
腹立つ (0件)
役に立つ (6件)
http://japanese.joins.com/article/707/153707.html?servcode=300§code=300
-(void)methodA:(id<protocolB>) hoge { [hoge methodB] } 引数に渡したクラス(protocolBを実装してる)によって処理が変わるメソッドの書き方はこれであってますか?
317 :
デフォルトの名無しさん :2012/06/15(金) 09:37:41.99
上でテーブルビューとデリゲート教えてくれた人達昨日はどーもでしたどーもでした
>>317 ありがとうございます
「メソッドがありません」エラーがでてしまったので質問しました
構文があってるなら、実装が悪いのかな…探してみます
>>316 if ([hoge respondsToSelector:@selector(methodB)]) {
}
で囲った方が安全だよ。
321 :
デフォルトの名無しさん :2012/06/15(金) 16:06:14.81
>>320 そうするとメソッドが無い場合(ようするにデリゲートがnilの場合)
処理を行わないって訳だな?
こいつは良い情報!
required protocol ならそんなことをする必要はない
323 :
デフォルトの名無しさん :2012/06/15(金) 16:32:16.94
ほう。
デフォルトはどっちかなと調べたらデフォルトがrequired。
>>320 を使う事は滅多に無さそうだ。
>>321 >ようするにデリゲートがnilの場合
optionalメソッドでデリゲートが実装してないの場合ね
325 :
デフォルトの名無しさん :2012/06/15(金) 19:39:51.14
>>309 > IBを使わないでコーディングしています。
> 親のViewDidLoadで共通部品生成
IBを使わないコーディングをしているのに、ViewDidLoadを利用するのって変じゃないか?
いったい何がしたいの?
327 :
デフォルトの名無しさん :2012/06/15(金) 20:41:53.34
>>326 もちろん普通に使うよ。
つまり、IBを使っているということだろ?
view lifecycleとかググって読んだ方がいいんじゃないの?
いや公式のドキュメントを読めよ
日本語訳されたのでiOS ViewControllerプログラミングガイドってのがあるな
ViewDidLoadとIB使ってる使ってないは関係ないだろ
333 :
デフォルトの名無しさん :2012/06/15(金) 22:54:35.64
ん? viewDidLoadは、nibファイルがロードされてViewが生成された後に呼ばれるメソッドだろ? nibファイルが関係するなら、当然IBを使うってことじゃないのか? それに、nibファイルを使わずに、自前でViewを生成する場合は、loadViewの方を利用するんじゃないのか?
いずれにしてもviewDidLoadは呼ばれる
loadViewの後でviewDidLoadは何もおかしくはない
336 :
デフォルトの名無しさん :2012/06/16(土) 00:28:32.64
>>335 > loadViewの後でviewDidLoadは何もおかしくはない
もちろん、それは何もおかしくない。
でも、今回はなぜかloadViewの話が出て来ない、代わりにviewDidLoadの中で自前のViewを生成することになってるだろ?
つまり、nibファイルによってViewが生成され、さらに自前でもViewを生成すると。
しかも生成するのが共通部品ということなら、普通にnibファイルの中に入れちゃえば良かったのでは?
今回の話では、共通部品(UITableView)を生成する「親クラス」と
親クラスで生成した部品を利用する(UITableViewDelegate)「子クラス」がある。
この2つのクラスが、派生・継承の関係にあるから、話が複雑になってしまったのではないかと。
それらのクラスが、別々の独立したクラスなら、もっと単純な方法が取れたんじゃないかなと。
delegateを指定する話じゃねーの?
loadViewはViewのload(生成)、その余儀としてのdelegateの設定はviewDidLoadで問題無いだろう nibを使おうが使わずにloadViewでコードで作成しようが、どっちにも対応できるだろう。nibを使ってないそうだが問題ないどころかより適しているだろう 後半は何を言っているのかわからん。なにをひとりでカラわまりしているんだ?
339 :
デフォルトの名無しさん :2012/06/16(土) 00:45:15.91
UITableViewがnibファイルの中に入ってて、「子クラス」がそれのFile's ownerなら、ごく普通にdelegateが設定できるだろ?
nibを使っての話だろそれは
341 :
デフォルトの名無しさん :2012/06/16(土) 01:00:32.41
>>338 >>340 loadViewを使っていないようだから、逆にnibは使わさっているんじゃないのか?
IBを使わないでnibを使う変態は俺は知らないw
IB使わなくともviewDidLoadメソッドは利用するよ。 ちょっとUIViewとUIViewControllerの役割りの違いとか勉強した方がいいんじゃない?
単なる nib からロード(文字通りロード)したときのみ、viewDidLoad が呼ばれると間違って思い込んでいただけのようだけどな。もう過ちはとっくに理解しただろう あとはグダグダ言っているだけw
345 :
309 :2012/06/16(土) 01:42:25.81
お前さんも
>>330 を読みなさい(そのWeb主もw)。せっかくタダで日本語でわかりやすいのにい
347 :
デフォルトの名無しさん :2012/06/16(土) 03:13:42.61
>>346 読みました。loadView部分のコードをコピペして
いままでviewDidLoadに書いていた部分を移動しました。
本に乗ってたサンプルだとテーブル作った時点でデータ取りにいってたので
delegateとDataSourceの設定だけViewDidLoadに書いてreloadDataすることで
満足のいく形になりました。
IBは使えるようになったほうがいいですか?
AppleはIB推しなのでしょうか?これからは主流になるでしょうか?
GWTや.NETでコードで配置するスタイルに慣れているのですが...
AndroidやMetroアプリも両方の手法を用意しているようですが...
>>347 うん、使えっ!Apple推しというかそもそもニコイチ。発生元のNeXTから
例えばあ、これから出るかもしれない、iPhone の変なのとか、コードに埋まっている、数値いじったりするよりは、nib で分けておいた方がいいと思うけどなあ
nib 使わないヤツはちょっと変態だと思う、俺は。別に好き好きでやってるんだろうからどうでもいいけど
本ではnibで説明するのが面倒だから、コードでじゃないのかなあ。まあ変態wが書いているのかもしれないけど
クラスの実装においても, インスタンスヴァリアブルへのアクセスは, イニシャライザを除いて, インスタンスヴァリアブルに直接アクセスするのではなくアクセッサを介して行うべきだ,と聞いたのですが インタフェースとインプリメンテーションでインスタンスヴァリアブルの挙動を変えたい場合, ようするに外からはreadonlyにしたいけれども, クラス内ではreadwriteにしたいとき,どのようにすべきなのでしょうか? インタフェースにはreadonlyで宣言し,実装ファイルではクラスエクステンションを用いて, プロパティ宣言をreadwriteでオーバーロードしようとすると, Property attribute in continuation class does not match the primary class と怒られてしまうのです.
>>349 インスタンス「変数」でいいよw
Hoge.h
@interface Hoge
@property (readonly) id hogeValue;
@end
Hoge.m
@interface Hoge ()
@property (readwrite) id hogeValue;
@end
@implementation Hoge
@synthesize hogeValue;
...
@end
で、別にエラーにならずに、ちゃんと機能するけど?
前々スレの
>>219-228 で出た話題だな。
ていうか最近の無名カテゴリって結構やりたい放題出来るよね。
>>350 ありがとうございます。
readwriteだけだと上手くいくんですね。
strong, readwrite, atomicだと警告が出ますが
readwriteだけでも強参照にはなるのでしょうか?
>>352 readonly 以外の部分は同じじゃないとダメ
>>353 ありがとうございます.
なぜか, readonlyの方だけstrongをつけていなかったのですが, 確かに, readonly/readwrite以外同じにしたら警告が消えました.
サブクラスの実装を, スーパークラスと同じ実装ファイル内に書いて, クラスエクステンションを使えば, 親クラスのプロパティを隠蔽しつつ, サブクラスからはアクセス出来るように出来るので, 便利ですね.
しかし, プロパティを介してアクセスを行うと,インスタンス変数にアクセスする度にアクセサメソッドの呼び出しの処理や, さらにatomicにしているといちいちロックの処理が挟まれ, 無駄な処理が多くなる気がするのですが皆さんどうされてますか?
本当にそこがボトルネックになるならば直接アクセスにすればいいし、 なるかどうかわからないのであれば気にしなければいい atomicはたいして意味がないから基本nonatomicでいい
>>354 気になるなら直接インスタンス変数使えばいいんじゃないの
getterはatomicの時(スレッド間で同期が必要なもんとか)にしか利点が無いような
setterは利点あるし、わざわざインスタンス変数直接ってのをするほど使わないような
358 :
デフォルトの名無しさん :2012/06/17(日) 00:26:28.79
XCodeで新規で空プロジェクト作成すると @synthesize window = _window; とインスタンス変数を作成するのに - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; と直接_windowを使わずにプロパティアクセスにしてるのはどんな意図なんだろう? 全部このスタイルで書いた方がいいのかな
setterは属性によってrelease/retain勝手にしてくれる/しなくてもいいのはしないし、 ソースファイルのARCの有り無しでretain/releaseを書けない/書かなければならないとかいう矛盾も吸収してくれる など、気まぐれな方針変更も極一部を書き換えるだけで済む
>>358 なにいってんだおまえ
@synthesizeはインスタンス変数の生成じゃあない
すまん文盲だった
ああ、ARCオンだとrelease/retain勝手にしてくれる/しなくてもいいのはしないってのは同じなのか(?)
2008年頃のApple自身のHellowWorld出すサンプルと 2011年頃の同じくHellowWorld出すサンプルで そもそもApple自身の中でコードの作法が違ってるからな…
>>355 >>357 ありがとうございます
うーんバンバンdispatch_asyncしてるのでatomicの方が安全かなと思うのですが難しい所ですね
atomicにしてても, インクリメント等するときや複数のプロパティをまとめてゲットしなきゃいけないときはさらに外側で@synchronizedしないといけなかったりするので
@synchronizedばっかりになってオーバーヘッドになりそうな気も
365 :
デフォルトの名無しさん :2012/06/17(日) 11:21:33.43
>>364 それは、「平行処理プログラミング」について勉強すればいい。
そうすれば、@synchronizedを使わずに済ませる方法が分かる。
ちなみに、「マルチスレッド・プログラミング」と「平行処理プログラミング」は違う。
>>365 平行処理とマルチスレッドってどう違うの?
367 :
デフォルトの名無しさん :2012/06/17(日) 17:20:39.66
>>366 マルチスレッドの方は、ただ単純に複数のスレッドを使うだけ。
平行処理の方は、複数のCPUコアを使う高度なパフォーマンスチューニングテクニック。
たぶん、単純に”マルチスレッド”て調べただけでは、「@synchronizedを使わずに済ませる方法」には辿り付けないかもしれない。
スレッドプールとかGCDとかで複数のスレッドを使うようにするのは、 そのまま複数のCPUコアを均等に無駄なく使う事に繋がるのでは。
iPhoneもマルチコアなんだっけ?Mac限定?
4S は 2 コアだと聞いた
371 :
デフォルトの名無しさん :2012/06/17(日) 23:55:29.52
>>368 そういうレベルの話じゃない。
ただ単にマルチスレッドな話だと、スレッドセーフにするために「ロック」や「セマフォ」を使いましょう。
といった内容になるだろう。
平行処理の方は、複数のCPUコアを同時に動かすことでパフォーマンスを稼いでいるので、
「ロック」や「セマフォ」などでスレッドを一時停止させては意味がない。
つまり、「ロック」や「セマフォ」を使わずに、スレッドセーフなプログラムを組む。
といった内容になります。
スレッドもCPUコアと同じ数しか作らないので、逆に言うとシングルCPUな環境だと無意味。
シングルCPUな環境なら、NSRunLoopを活用した方がよい。
パフォーマンスを稼ぐっていうのに執拗で、そんなに並列化してぎっちぎっちな最適化が必要なプログラムなんてほとんどねーよ 理論だけが先走りっていうあたまでっかち典型のように見えるな
373 :
デフォルトの名無しさん :2012/06/18(月) 00:32:53.23
>>372 そう思うなら、オーバーヘッドを気にせず@synchronizedを使えばいいだけの話だ。
お前はそれ以上のことを言っているんだがな。それもリアル感が無いってのを というのが気になっただけだよ
ちなみに、@synchronizedやNSLockのコストは微々たるもんだよ。全体から見れば
問題は実際に競合して止まる度合いだろう。しょっちゅう引っかかるようなら、お前の言うよくわからん並行処理とやらで競合があまりしないようにしなければならないということだろ
元ネタの
>>364 は、コード書いていての気分的なもんでしかないと思うけど
平行じゃなくて並列(パラレル)じゃね? それかコンカレントなら並行。
脱原発、脱原発と叫びながら、既にこの時期にエアコン使ってる奴は糞 原発はダメだけど電気は寄越せってか!
>>371 CPUで計算するだけなら並列処理にはマルチコア必要だけど、時間のかかるI/Oと
他の処理並行動作させたりするのもマルチスレッド化の大きな目的だから、
コア数どうこうは関係無いよ。排他制御の類は必ず必要だし、シングルコアだから
スレッド化不要とかロック多用して良いって事にもならない。
あと、単にカウンタ値増減したり、キューにデータ突っ込んだりとかは
atomic operationが用意されてるので(OSAtomicなんとか)これを上手く使えば
ロックの類は使わなくて済む。
なんだか論点がずれてるな
理論だけが先走って、いつまでたっても物が出来上がらないタイプだな
良く分からんけど、その平行プログラミングってのはBONICみたいなのを単一コンピュータでやるってこと? work unitの取得さえ同期してれば後はお好きにどうぞって奴
382 :
デフォルトの名無しさん :2012/06/18(月) 18:57:22.96
>>375 @synchronizedやNSLockのコストとか、競合の発生率なんかよりも、
LockとUnlockで囲まれた部分のコストが問題になりそうな気がするが。
>>378 GCDを使いまくってて、各タスクの中にある@synchronizedがウザイという事で、
それを何とかしたかったら並行処理プログラミングをしろ。という話のはずだが?
>>382 意味わからん。LockとUnlockで囲まれると何か余計なことされるわけ?
>>382 囲まれた部分はコストも何も本来必要不可欠なものだろう。その部分を安全にということでLockとUnlockするのであって、それが安全にというためだけ(つまり競合しなければ不必要)で、Lock/Unlockしなければならない部分がコストなんだけどな
NSLock(てかセマフォか)使えば、その間のコードに余計な何をされるかなんて思いもよらないし、@synchronized はNSLockをより便利にってようなもんだろ(違うけど)
どうも意味がわからん。だから並行処理とかなんとか言いたいのか??
✕Lock/Unlockしなければならない部分がコスト ◯Lock/Unlock(Lock/UnlockにかかるCPU消費量)がコスト
お前えらコストって言ってみたいだけだろ
クラシック対応でCarbon+QuickDrawでオンラインゲーム作ってるやついる?
388 :
デフォルトの名無しさん :2012/06/18(月) 19:56:09.66
>>384 「コスト」という言葉が悪かったか。「処理時間」と言い直そう。
長い間Lockされ続けると問題になると言う意味。
>>388 だーかーらー、それも競合しなければ何も問題にすることじゃないってのに
競合が問題であって、競合がひどかったら自然とそうならないようにするだろ。わざわざ並行処理なんて持ち出さなくたって
長い間Lockされ続けるという例を出すも不適切だろ。お前はそんな下手糞なのか?
ついでに、
>>378 は
>>371 で余計なところを指摘しているだけだろ
なんか言い出して後に引けないというのは近いところで見たことがあるなwまあ、アレはひどすぎたがw
>>386 いや、違う。競合って言ってみたいんだよw
イミフ
393 :
デフォルトの名無しさん :2012/06/18(月) 20:46:50.14
>>389 だから〜、「競合する」という前提条件があるからロックするんだろ?
> 競合が問題であって、競合がひどかったら自然とそうならないようにするだろ。わざわざ並行処理なんて持ち出さなくたって
もちろん、競合すること事態が問題だ。そして、その競合を回避する手段として並行処理があるという話だ。
「@synchronizedを使わずに済ませる」というのは、けっきょくのところ競合しなくなるからだぞ。
@synchronizedもセマフォもミューテックスも使わずにどうやって整合性を保証するんですか?
>>393 競合するかもしれないだよ。各スレッドは勝手に動いているものだからな。タイミング取る方がむずかしいぐらいだ
保険としての意味合いの方が大きいだろう
そんなのは普通なことだろってことなんだがな。並行処理とやらのなんだか高尚そうなことを言い出さなくても
元々はそんなレベルの話ですら無いだろう。お前が並行処理とかやらの理論に拘るのはいいが、持論を強化するために余計なトンチンカンに見えること言うから(
>>371 )、その持論も怪しいものに見えるってことだよ
長い間Lockされ続けるは無しでいいんだな?w
Glenn Seemannが一番最強だけどな お前らは小物なんだよ
>>396 大物らしくしてください。それだと狐にしか見えませんぜ
Glenn Seemannって言ってみたかっただけだろ
GCDは、lockのコスト軽減云々よりはむしろdeadlockや不適切なlockの範囲など、 プログラムエラーの回避を容易にするためのもんなんじゃないの?
ここで新説の登場か
GCDはスレッドプールだろ
連想参照で基本データ型を登録する関数が無かったのでラップしてみたんですが、こんな感じで合ってるんでしょうか? void objc_setAssociatedIntegerValue(id object, const void *key, NSInteger value) { NSNumber *number = [[NSNumber alloc] initWithInteger:value]; objc_setAssociatedObject(object, key, number, OBJC_ASSOCIATION_RETAIN); } NSInteger objc_getAssociatedIntegerValue(id object, const void *key) { NSNumber *number = objc_getAssociatedObject(object, key); NSInteger value = [number integerValue]; return value; }
ARCならあってるけどMRCならリークしてる
ありがとうございます。ARCです。 しかし連想参照オブジェクトが空だった場合の処理を忘れてました。 NSInteger objc_getAssociatedIntegerValue(id object, const void *key) { NSNumber *number = objc_getAssociatedObject(object, key); NSInteger value; if (number != nil) { value = [number integerValue]; } else { value = 0; //NSNotFound? } return value; } この場合NSNotFoundの方がいいんですかね?
マジすねおだった。ああスネオは親が金持ちっていうのがあるからそれ以下かw
408 :
デフォルトの名無しさん :2012/06/19(火) 22:50:43.95
>>404 > この場合NSNotFoundの方がいいんですかね?
それは、このコードの仕様を考えた自分自身にしか分からない。
>>405 俺昔一人でEQ LikeなMMO書いた人知ってるけど、お前みたいにドヤってもいいかな?
すみません ARCについてですが、変数に代入せずに、あるメッセージ送信のなかに入れ子で ・・・withInstanceA:[[ClassA alloc] init] ・・・ とかやると所有権つきで作った後メッセージに引数として渡した後リリースするすべが無いのでリークしますよね? また、一時的なインスタンスを取り出して一時的なインスタンスを返すメソッドで、一時的なインスタンスをreturnに直接渡すのもダメで、一度変数に代入してリテインしてやらないとマズイですよね? 例えば - (NSString *)URLPathComponent1 { return [[[self url] pathComponents] objectAtIndex:1]; } これはマズくて - (NSString *)URLPathComponent1 { NSString *pathComponent; @autoreleasepool { pathComponent = [[[self url] pathComponents] objectAtIndex:1]; } return pathComponent; } ってしないとダメですよね?
ARC=Auto Refarence Counting 自動で参照カウンタを操作する 自動で参照カウンタを 自動で 自動
>>410 いちいち変数に入れる必要はない。あと、ほとんどの場合、自分で @autoreleasepool {} を書く必要もない。
>>409 外人?
どうせドルアーガの塔レベルだろ
コミュニティはどれくらい続いてる?
10年以上続いてるかな?
サーバー代とか無料プレーかな?
まぁ・・・オライリー本出してるしね5★
好評価
今もなお各国のファンがフォーラムに書き込んでるしね
開発者はGlenn+Davio
http://ja.wikipedia.org/wiki/Oberin >>開発者のGlennは個人的な興味で開発・運営を行っているらしく、今後も無料で運営を継続する見込みである。
現在、OberinのサーバはGlennの自宅サーバで稼働しているものと考えられており
多人数がログインすることで動作速度が極度に低下するなど、回線のトラブルが絶えない。2005年8月には巨大ハリケーン・カトリーナの影響でGlennの自宅が被害を受け、サーバが停止するという事態も起きた。
Xcode,CodeWarrior,C言語,Carbon+QuickDrawで作られてるしね・・・
どうせお前のゲームはWindowsとかの方だろw
Macの開発者ないんだろうな
まあクズで視野が狭いし 世界観も狭そうだから
知らないんだろうなグズが
うん、天才かえっていいから もしくはObjective-Cの話をしてみてよ
>>410 ARCだと
- (NSString *)URLPathComponent1 {
return [[[self url] pathComponents] objectAtIndex:1];
}
これをコンパイルすると自動的に
- (NSString *)URLPathComponent1 {
return [[[[[self url] pathComponents] objectAtIndex:1] retain] autorelease];
}
になる
・・・withInstanceA:[[ClassA alloc] init] ・・・は 書かれた場所などを判断して、
retain, autoreleaseを適切に自動的に付け足す
NSUserDefaluts使って2つのViewController間で値渡しってさせられる? ViewControllerAである変数をNSUserDefalutsに保存してViewControllerBから読み込むみたいな できたら便利なんだけど
ぜんぜん便利に思えない・・・
え?便利じゃない? Prapareなんとかって無駄に長いし
グローバル好きと変わらないような。グローバルも便利だと言えば便利だろう 値渡しとか一時的なもんに使うのは気持ち悪いんだけど。グローバルじゃなくてNSUserDefaluts 使うのはグローバルが気持ち悪からでしょ? NSUserDefaluts って文字が示しているように一時的なもんじゃなくて、Defaults (ユーザ設定)に使うもんだけど。本来
直接わたせばいいじゃん
ああ
>>417 のような質問をするってことは、何もわかってなかったんだな
そんなことするなっw
え、グローバル変数って別のクラスからでも扱えるの? できなかったんだけど
んーと、君は某スレの人でしょ。いろいろと勉強しなさい グローバルはグローバルだよ。クラスなんて関係ないよ。どの言語でも
>>423 てか、使おうとするなよっw
まあ、お前さんがどう変なコード書こうがお前さんの自由だが
>>411 ,412,416
ありがとうございます。
ということは, 自動で変数を用意して代入してから引数として与えてしかる後に解放してくれるんでしょうか
単にretainやreleaseやautoreleaseを適切な場所に挟んでくれるだけだと思ってたので、
MRCだと挟めない書き方をするとダメだと思ってたんですが一時的に変数に移すのまで自動でやってくれるんですね・・・
- (NSString *)URLPathComponent1 {
return [[[[[self url] pathComponents] objectAtIndex:1] retain] autorelease];
}
↑これだと、この後メソッドから抜けるときに更にもう一度autoreleaseが掛かるはずなので、オーナーシップの数を超えてautoreleaseされると思うのですが大丈夫なんでしょうか?
こちんこちんのちんこ
>>426 イミフ。ARCとMRCがごっちゃになってない?
ARC厳禁でMRCから始めてみたら?
>>428 alloc, copy, mutableCopy, newメソッドファミリに属するメソッドは保持可能なインスタンスへのポインタを返し、これら以外は一時的なインスタンスへのポインタを返すだったと思いますが、
一時的なインスタンスへのポインタを返すということは, そのメソッド定義の最後で, autoreleaseされてreturnされるということだと思いますが、
ARCではretain, release, autoreleaseは書けませんから、そのメソッド定義内でオーナーシップを持っていたオブジェクトを、最後にautoreleaseする処理が自動的に入るはずです。
なので、一時的なインスタンスを返すメソッド定義では、最後にautoreleaseが補完されることを念頭に置いて、オーナーシップを持っておかなければならない、
つまり一時的なインスタンスを別の上記メソッドファミリ以外のメソッドで取得し、オーナーシップを取らずにそのままreturnするとまずいと思うのですが間違ってますでしょうか?
>>423 sharedXXXとか使ったことないのか?
てか421の言うように直接渡せばいいだろ
渡される側に公開メソッドとかプロパティ用意すればいいだけだろ
>>429 「参照カウント」だぞ?カウンタを増減するだけなのに難しく考え過ぎ
メモリの解放はカウントがゼロになった時点でランタイム側が行う
それにしてもdelegateベースの多態に慣れないなあ
なんかjavaっぽくなってしまう...
実現できるからいいっちゃあ良いんだろうけど人に見せられない
delegateベースの多態?
432 :
デフォルトの名無しさん :2012/06/21(木) 01:15:48.28
>>429 > 一時的なインスタンスを別の上記メソッドファミリ以外のメソッドで取得し、オーナーシップを取らずにそのままreturnするとまずい
自動的にretainして、自動的にautoreleaseされるから、問題なし。
- (id)hoge {
id boke = [NSString stringWithFormat:@"%i", 123];
[boke retain]; // ARC自動挿入
[boke autorelease]; // ARC自動挿入
return boke;
}
>>429 やっぱりMRCが始めるのがいい。Reference Counter がわかってないので(
>>430 の言う通りだんだけど)
ARCは高度に勝手にコード中にrelease/autoreleaseが入る。それは値を返すメソッドとは限らず、受け取り側のコード中にも埋められる
ほとんど Reference Counter を意識させないのがARCの目的でもあるんだが、あなたのように気になりまた、間違って理解しているなら、MRCからだね。やっぱり
>>429 id foo = [anObj URLPathComponent1];
↑ここ(呼び出し側)で適切にオーナーシップが設定される。
この場合なら恐らく retain,autorelease だけど、プログラマが考える必要は特にない。
口だけバカは逃げたか 虚勢はって逃げたな
梅雨時になると変なカエルが出てくるね
質問なんですが、ARCの環境で、ヘッダで @property (readonly) *string hoge; と宣言して、実装で @synthesize hoge = hoge_; と定義して、中のコードで NSString *fuga = "....."; NSString *piyo = "....."; NSString *hogera= "....."; : hoge_ = [fuga copy]; : hoge_ = [piyo copy]; : hoge_ = [hogera copy]; みたいなことをやっても大丈夫でしょうか? (つまりhoge_のメモリリークとか起きないでしょうか?)
あ、ミスった。宣言部分は @property (readonly) *NSString hoge; です。
>439,440 __bridge 使って無理矢理キャストとかしてない限り何しても大丈夫
>>441 おぉ大丈夫なんですね。ありがとうございます。ARCすげー
もうひとつ疑問なんですが、
普通、viewDidUnload() で、
self.nameTextField = nil;
みたいに、不要なもの(viewDidLoadで作成したものとか)にnilを代入すると思うんですが
ARC環境下では、これも不要になるんですかね。
それとも、ARC環境下でもこういう処理は入れといた方がいいんでしょうか?
dealloc でのreleaseは不要ですよね。(というかreleaseするとコンパイルできない)
>>442 いや、それは推奨
releaseの代わりにということで(推奨=strongの場合のみだったかな)
>>443 あぁ、この処理は今まで同様必要なんですね。
ありがとうございました。 m(_ _)m
>>442 weak なら viewDidUnload: で self.nameTextField = nil; は不要なはず。
(weak ならオブジェクトが破棄されたら自動的に nil になる。)
>>445 Appleのサンプルとかみたら、IBOutletではweakが使われてますね。
weakだと自動的にnil入れてくれるんですね、なるほど。
objective-c でC++ のstd::vector コンテナのような配列ってありますか?
NSMutableArray もしくは std::vector
あ、いや、Objective-C++ ならね < std:vector
NSDictionaryのキーってNSString以外は使えないのですか? URLをキーにしたい場合、absoluteStringをキーにする感じでしょうか?
使える
使える認定 キタ━(゚∀゚)━
NSCopyingプロトコルに準拠していて isEqual:メソッド(とhashメソッド)がキチンと動くものなら、なんでもkeyに使える
@property (nonatomic,strong) NSString *name; というプロパティを持つオブジェクトを複製しようとして objB.name = objA.name ってやってしまい、stringWithStringってやっとかないと どっちか書き換えると両方書き換わっちゃうかと思いきや 別々に動いてるんだけどなんか勘違いしてるかな?
objB.name にcopy属性が付いてるんじゃないの?
書き換えというのをobjA.nameの元ネタがMutableで、元ネタの「内容」を書き換えようとしたのか、単にインスタンス値(?)を書き換えただけなのかが問題だな
>>455 >objB.name = objA.name
これだとポインタが同値になるだけだよ。どちらも同じオブジェクト。
- copyWithZone しなきゃ。
あ、プロパティか。
mutableじゃないんじゃないの?
NSStringのプロパティならふつーstrongじやなくてcopyにするよね
うん。で、書き換わっちゃうなんて心配も全然どっかいっちゃうよね
ま、オブジェクトごと複製するんならcopyWithZone使った方がいいんではないか。
Zone なんてほとんど気にしないから、copy/mutableCopyしか使わないけどね
modern runtimeだとzone無視されるし、ARCだとそもそも使えないしね
自作プロトコルでデリゲート通知を行うとき [delegate someMethod]; ってやらないで performSelectorを使ってるサンプルが多いのはなぜだろう respondsToSelectorと並べたいだけかな。 自作フレームワークの場合はそもそもrespondsToSelectorも要らないよね
performSelector はdelayを使って、処理を先のフレームに遅延させたい時によく使うな。俺の場合はね。
もうなんでもGCDでやろうぜ
>>466 メソッドがはっきりしているんだったら、performSelector 使う意味はないよねえ
俺もそういう場合は普通にメソッド呼び出ししている
respondsToSelectorとperformSelectorで使うからと、SEL selector = @selector(...) するとARCでは怒られるのがこのごろ嫌
>respondsToSelectorも要らない
optional を使わないならいらないでしょ
performSelectorと直接実行は意味的に同じではないけどね。delayを0にしたとしても。 その違いを理解していないと、なかなか使い分けられないだろうね。
それだとdelay付きのことだけを言っているようだけど? delay無しは直接実行(?)とおんなじだよ
performSelector を呼んだら、セレクタを実際に実行するまで返ってこないってことね<おんなじ delay 付きは0にしても、どっかのキューに登録するだけで直ぐに返ってきて、セレクタが実行されるのは次の実行ループだと言いたいのはわかるが、どう理解して使い分けているんだろ??
おっとプロトコルの方の話か、失礼した。
>>472 例えばなんかの処理中に UIActivityIndicatorView を回転させたい時に
startAnimating の直後にその処理を直接実行しても インディケータは回転しないから、
いったんcurrentRunLoopに戻すためにperformSelectorのdelayバージョンで使うとか。
あるアニメーションの中で、別のアニメーションを起動したいけど、タイミングをずらしたい時とか。
あるアニメーションの中で別のアニメーションを実行するとアラート吐くことあるからな。
ここでいうアニメーションとはImagePickerの起動とかviewの遷移アニメーションも含む。
>>474 delay付きだけの話ね。それは0でも遅延だから
>>467 も言っていることだろうし、俺も遅延としては便利に使う
でもそもそもdelay付き(に限って)の話ではないので
>>470 でいきなり理解してないとというが理解できなかった
delegateでも遅延の方がいいかなあという時もあることはあるけど、さほどないし
jsのsetTimeoutと同じってことでいいの?
うん。同じというと語弊があるが同じw
delay と timeout じゃ意味違うだろ
>>478 jsのtimeoutはdelayの意味だよ。名前が悪い
デリゲート繋がりで、
.h
@property (nonatomic,weak) id<protocol> delegate
.m
@synthesize delegate;
って宣言したとき
[delegate someMethod];
ってやるとプロパティ経由になるよね?
@synthesize delegate = _delegate;
[_delegate someMethod];
ってやるほうが流儀なのかなあ。どうでもいいか
[self.delegate someMethod]; ってやらないとプロパティ経由にならないんじゃねーか?
>>480 あ、そうだった。長々とすまん。
この場合delegateはdelegateって名前のプロパティに対応した
プロパティと同名の自動生成されたクラス変数なんだよね
ややこしい
Objective-Cにクラス変数は無いじょ
>>479 元々はインスタンス変数を別に宣言しなければならず(だったはず)、それに対するsetterとgetterがプロパティ
インスタンス変数の宣言が省略可能になったので、
@synthesize delegate
は、delegate というインスタンス変数が
@synthesize delegate = _delegate;
は、_delegate というインスタンス変数が
というだけなので、
>>480 の言うとおり
NSPredicateについて聞かせてください. あるentityAから, 1:n対応でentityBと双方向のrelationshipがあるとき, かつ, entityAに関連づけられたclassAのインスタンスaが既知のとき, aとrelationshipを持つ, entityBに関連づけられたclassBのインスタンスb1, b2, ... bn全てをfetchするには, NSPredicateじゃダメで, classBのインスタンスをどかっと全部fetchしてからプログラム上でaとrelationshipがあるものを抽出する...という形になるのでしょうか.
いいえ
>>485 ありがとうございます。
[@"self in %@", a.bs]
で調べられるんですね・・・、
%@ですから文字列比較しかできないものかと
>>487 エッ――!
%@ってNSString以外にも使えたんですか・・・
確かに配列とかURLとかに使われていることがあったのですが
てっきり自動でdescriptionを呼び出しているだけかと・・・
description はNSStringじゃなくて、NSObjectプロトコルの必須メソッドな。 だからNSObjectに適応したオブジェクトは全て%@で出力対象となる。
>>489 えぇ、それはわかるのですが
ですから@"self ub %@", a.bs
なんてのはa.bs.description(←この時点でNSStringになってしまう)のなかにselfがありますか、
ということだと思って
a.bs(←NSArray)の中からself(evaluatedObject)を探してくるなんて芸当をやるとは思いませんでした
> [@"self in %@", a.bs] これって何してるの?
ありがとうございます。読んでみます。 相互参照で、entityBからentityAはn:1対応なのでもっと簡単に調べる書き方がありました。 @"a == %@", a こっちの方が配列から探さず調べられるので多分速い?かも知れません
494 :
デフォルトの名無しさん :2012/07/01(日) 00:20:04.31
>>484 CoreDataな話なんだよね?
インスタンスaに、インスタンスbへのrelationshipを表すNSSet型のプロパティbsがあるはずだよね?
495 :
デフォルトの名無しさん :2012/07/01(日) 13:07:35.34
>>493 それについても、
インスタンスbに、インスタンスaへのrelationshipを表すClassA型のプロパティaがあるはずだよね?
NSPredicateを使って検索する必要ないんじゃ?
日本が生み出した発明品というと何を思い浮かべますか?
暮らしに密着する「乾電池」から日々の生活をちょっと楽しくしてくれる「カラオケ」まで
日本で誕生した発明品はありとあらゆる場面で使われています。
ネットユーザーは、「日本が発明した生活の中の発明品」を紹介し、日本の発明力はすごいと書き込みました。
日本が発明した生活の中の発明品
・プラスチック消しゴム:1964年に株式会社シードが発明。
・「折る刃」式カッターナイフ:1959年に岡田良男が発明。
・カラオケ:1971年に井上大佑が発明。
・VHS:1976年にビクターが開発。
・自動改札機:1967年に立石電機(現・オムロン)が開発。
・腕時計:1969年にセイコーが開発。
・インスタントラーメン:1958年に日清食品が開発。
・インスタントコーヒー:・電気炊飯器:1955年に三並義忠が発明。
・ウォークマン:1979年にソニーが開発。
・CD:ソニーが開発。
・乾電池:1887年に屋井先蔵が発明。
・使い捨てカメラ:1986年に富士フィルムが発売。
・エアバッグ:1963年に小堀保三郎が発明。
<コメント>
・本当にすごい。
・腕時計は本当に日本?
・素晴らしい製品をたくさん作っていますね。ありがとう。よく使ってます。
・うん、確かに日本が発明したもののようだ。
・日本は100年前から先進国だし。
・CDはソニーとフィリップスが共同で開発したものです。
・インスタントラーメン発明記念館に行ったことある。
・日本の青年がハイブリッドカーのタイヤに付ける音発生装置を作ったそうだ。日本ってこういった人が時々登場すると思う。
http://koko-hen.jp/archives/3327497.html
昔の日本人ってすごかったんだね。どうしてこうなったんだろ。
腕時計じゃなくてクォーツ式腕時計だろ
だよな。腕時計で高級品は(機械式のすごいのも)日本のじゃないしな
>>497 お前らの認識がその程度なんだから、そうなったんじゃないの
スレチに反応するのも含めて、お前らはいろいろ頑張れ
日本がこうなったのは秋元のせい
フロッピーを忘れちゃいけない!
それを話の流れで言うならフレキシブルディスクだろ
>・日本の青年がハイブリッドカーのタイヤに付ける音発生装置を作ったそうだ。日本ってこういった人が時々登場すると思う。 Rubyの14歳子みったーを思い出した
>>494-495 ありがとうございます。もちろん最初に書いたとおり、
全部オブジェクトとしてとってきてから、b.a(bからaへの対1参照)なり、a.bs(aからbへの対多参照)なりのプロパティで比較すれば出来るのですが、
コードをシンプルにするのとパフォーマンスを改善するためにNSPredicateで条件指定出来ればいいなと思いまして・・・
505 :
デフォルトの名無しさん :2012/07/01(日) 23:29:14.28
>>504 > 全部オブジェクトとしてとってきてから、b.a(bからaへの対1参照)なり、a.bs(aからbへの対多参照)なりのプロパティで比較すれば出来るのですが、
ん??
要するに、EntityAに1:NでrelationshipしているEntityBを全て取得したい、ということなんだよね?
ClassA* a = fetchObject();
NSSet* bs = [a valueForKey:@"relationshipB"];
これで変数bsの中に、EntityAに1:NでrelationshipしているEntityBが全て入っていると思うのですが。
>>505 あ。その手は思いつかなかったです・・・。
中身はRDBMSだという固定観念に縛られておりました。
つい、いちいちフェッチしないといけないものかと
チュートリアルにも必ずしもフェッチしなくてもよい場合があると書いてありました
条件を加えて検索しなおすとかでなければ、オブジェクトのまま関係を辿れるんですね
ここで、もう一つ疑問が出てきたのですがあるオブジェクトと1:nで大量のオブジェクトが結ばれているとき、
このオブジェクトをとってきても、すぐに大量のオブジェクトがフェッチされる訳ではないようですが
だからといってツリー状にどんどん繋げてしまうと、何かの拍子で一気に大量のオブジェクトがメモリにロードされて落ちるんじゃないかという懸念があるのですが
あまり気にしなくても上手く管理してくれるんでしょうか
それとも、大量のオブジェクトへの参照があるところでリレーションを切って、キーを設定して、キーを元に明示的にフェッチするようにすべきなんでしょうか
507 :
デフォルトの名無しさん :2012/07/02(月) 19:11:40.27
>>506 ごく普通にオブジェクトを操作するだけで、背景で自動的にRDBMSが動いてくれるのがORMだと思います。
レコードをフェッチするという概念がオブジェクト側にないので、大量のオブジェクトのロードは基本的に制御しきれないと思います。
また、「大量のオブジェクトへの参照があるところでリレーションを切って」などとやると、ORMのメリットを失うような気がします。
実際に試して見て、「オブジェクトの大量ロード」がパフォーマンスに影響を与えないなら、気にしないのが一番ですし、
パフォーマンスに影響するなら、SQLiteのAPIを直接操作した方が良いと思います。
GNUstepでObjective-Cを始めようと思ってます。
GNUStepってObjectiveーC2.0にも届いてないだろ 覚えても使い道もないわAppleのとはソース互換もないわではっきし言うと無駄だと思うぞ
Mac買わなくてもObjective-Cはできる。Objective-Cの絶妙なゆるゆるさが堪能できる から、いいんじゃないの。MacでGNUstepやるのはなんの意味もないと思うけど
>>507 ありがとうございます。
とりあえず全部relationで繋げてみて、パフォーマンスがイマイチだったら対策を考えようと思います
すみません、もう一点聞きたいのですが
entityAと, entityBと, entityCがあり, entityCから, entityAとentityBに対多関係があります.
このとき, entityCの属性、targetによって, targetCの対象を切り替えるとき,target
C_TARGETS_A_SELECTED:ユーザーが選んだentityAのオブジェクト全て
C_TARGETS_A_ALL:entityAのオブジェクト全て
C_TARGETS_B_SELECTED:ユーザーが選んだentityBのオブジェクト全て
C_TARGETS_B_ALL:entityBのオブジェクト全て
としたいのですが、スマートなやり方が思いつきません
まずAをターゲットとするものとBをターゲットとするものでentity自体を分けたほうがいいのでしょうか
また、一番の問題がSELECTEDとALLなんですが、AやBのオブジェクトを新規作成したときとき、自動で(ALLに設定されている)Cに関連づけるのは無理ですよね?
となると、AやBからCを辿るのはやめて、対象がALLのものと、SELECTEDになっているもののうち対象のAやBを参照しているCを探す・・・という感じになるのでしょうか
AやBの増加に伴って、ALLになっているC全てにrelationが反映される保証が出来れば、AやBから自身を対象としているCを探すことが出来て便利なのですが。
プログラミング的には、AやBを増やしたときにちゃんとALLのCにつなげればいいのですが、
ビューコントローラから直接managedObjectContextにアクセスするやり方だとミスが起きやすい気がします
managedObjectContextをビューコントローラから隠蔽して、AやBの追加、そしてそのときCとのrelationを上手く調整するコントローラを作るべきなんでしょうか
513 :
デフォルトの名無しさん :2012/07/03(火) 18:46:30.40
>>511 うーん。。。なにやら変な方向に話が進んでいるような気が(^^;
CoreDataはデータストレージなので、基本的にデータを出し入れすることしかできません。
CoreDataそのものでロジックを組む事はできないよ。
で、その問題をどう解決すればいいのかは、もっと詳細が分からないとなんとも言えない、
けど、たぶん、根本的なところから設計を見直すはめになるんじゃないかと。
514 :
デフォルトの名無しさん :2012/07/06(金) 19:59:58.73
CoreDataって、MySQLのラッパーだっけ?
SQLiteじゃなかったか
>>514 リレーショナルなオブジェクトを永続化してリレーショナルに利用できる何か
バックエンドはあんまり関係ない
>>513 ありがとうございます。うーんなかなか難しいですね
やっぱりCore Dataじゃないほうが取り回し良さそうなのでCore Dataやめようかと思うんですが
一気に全データ同期がかからないよう細分化してしたら10個ぐらい
UIDocumentのサブクラスが出来てしまったんですが、こんなに増やすとリジェクトされるでしょうか
原則的には1アプリ1ドキュメントですよね・……
CoreDataをRDBと思って使うと死ぬ つか、RDBの様には使えない RDBを使いたいなら素直にRDBを使った方がいい
519 :
デフォルトの名無しさん :2012/07/06(金) 22:15:23.65
SQLiteだね 特に、NSInMemoryStoreTypeなんかは、SQLite固有の機能なんじゃないか?
520 :
デフォルトの名無しさん :2012/07/06(金) 22:20:39.57
>>517 > 一気に全データ同期がかからないよう細分化してしたら10個ぐらい
> UIDocumentのサブクラスが出来てしまったんですが
待て、それはそれで何かがおかしいぞ(^^;
>>520 ありがとうございます。うーんやっぱりおかしいですかね。
機能毎にリストやら下書きやらが必要になるんですが、
各々の機能ごとに同期すれば
タイムスタンプが変わっているリスト・下書きだけ同期すればいいので早いかな、と思ったんですが
それで細分化したらUIDocumentのサブクラスが10個に・・・
522 :
デフォルトの名無しさん :2012/07/06(金) 23:01:41.94
うーん。。。なんか、他の所でも、 「CoreDataを使えばコードを書かずに済ませることができる」 とか思っている初心者がいるようなのだが、 これって、ヒガレス本の影響なのだろうか? 話を聞くと、みんなヒガレス本を読んでいるっぽいのだが。
>>522 いや、読んでないです。コードを削減することが目的ではなく、
結構複雑なオブジェクトグラフを、出来る限り待ち時間を少なくして同期したいのですが
Core Dataは差分書き出しが出来るようなのでいいかなと思ったのですが、オブジェクトに任意の順番をつけるときにエンティティにindexをもたせたりとかややこしいなと思って
各機能間はIDを使って結合できるので、できるだけ切り離して一つの機能ごとにファイルにして同期した方がいいかなと思ったのですが
で、モデルコントローラで各ドキュメントを全自動で同期・読み込み・書き込み制御して、適切なオブジェクトグラフを提供するようにしたいのです
それともこのモデルコントローラをUIDocumentのサブクラスにして、各ファイルをフォルダに突っ込んでNSFileWrapperで提供すべきなんでしょうか
CoreDataってWebObjecsのベースになってたEOFと同じようなものだと思っていいんでしょうか?
526 :
デフォルトの名無しさん :2012/07/07(土) 00:40:02.59
>>523 > 結構複雑なオブジェクトグラフを、出来る限り待ち時間を少なくして同期したいのですが
CoreDataを利用する目的は、パフォーマンス(処理速度)ということですか?
> オブジェクトに任意の順番をつけるときにエンティティにindexをもたせたりとかややこしいなと思って
「任意の順番を付ける」ということならIndexのようなものを持たせるしか方法がないのでは?
どのみち、並べ替えのKeyとなるものが必要になりますよ?
> このモデルコントローラをUIDocumentのサブクラスにして、各ファイルをフォルダに突っ込んでNSFileWrapperで提供すべきなんでしょうか
CoreDataには、「一つのオブジェクトをルートにしてツリー構造を作らなければならない」
などという制約はないので、その辺はどうにでもなると思います。
> 各機能間はIDを使って結合できるので、できるだけ切り離して一つの機能ごとにファイルにして同期した方がいいかなと思ったのですが
・各機能のデータを結合する
・機能ごとにデータを切り離す
という2つの話が混ざっているように見えますが、いったい何がしたいの?
あと「同期」という言葉が出て来ますが、これって具体的には何と何を同期するの?
>>526 ありがとうございます。
>CoreDataを利用する目的は、パフォーマンス(処理速度)ということですか?
パフォーマンス、というと語弊があるかも知れません。
巨大なオブジェクト群を、いかに無駄なく(同期時に全てをアップロード/ダウンロードすることなく、必要な物だけ)アップロード出来るかということです。
オブジェクト群全てにNSCodingをつけ、ルートオブジェクトからアーカイブすれば同期はできますが、
アップロードする必要のない(既に同じものがアップロードされている)オブジェクトグラフの一部分も含めて全てアップロードすることになってしまい、無駄に通信量が増える上に、同期の待ち時間がかかりユーザーの操作にも影響します。
>「任意の順番を付ける」ということならIndexのようなものを持たせるしか方法がないのでは?
いや、NSCodingでルートから格納していくなら、NSArrayがインデックスを持つため、格納するオブジェクト自体にはインデックスをつける必要がありません。
Core Dataの場合、Entityにindexのアトリビュートが必要になります。さらに、そのindexが他のentityに依存する場合、そのentityに関連付けてindexを持たせるために、参照元に対する参照先のindexを保持するためのentityを作らなければなりません。
>CoreDataには、「一つのオブジェクトをルートにしてツリー構造を作らなければならない」などという制約はないので、その辺はどうにでもなると思います。
いや、NSFileWrapper云々の話は、Core Dataではなく自作クラスでオブジェクトのシリアライズ・デシリアライズを管理する場合の話です。
>いったい何がしたいの?
オブジェクトとして使うときは、ファイルを読み込んでオブジェクト化し、関連あるオブジェクトとの参照関係をつくらなければなりませんが、その参照関係はコードで復元出来るので、
ファイルとしては別々に保存できるため、ファイルとしては別々にして各々同期するようにしたいということです。
>あと「同期」という言葉が出て来ますが、これって具体的には何と何を同期するの?
もちろん、ローカルとiCloud(Ubiquitous Storage)です。
ヒガレスw
>>525 ありがとう
昔の(NeXTの頃の)EOFとはほとんど同じだけど微妙に違うのね
531 :
デフォルトの名無しさん :2012/07/07(土) 13:43:58.10
>>527 > もちろん、ローカルとiCloud(Ubiquitous Storage)です。
もちろんって言われても(^^;
iCloudストレージの話だということは、今初めて知ったよ。
それで、インターネットとのデータ通信量が最小限になるように最適化したいということか。。。
でもそれだと、もはやCoreDataとは別次元の話になってくるような気がするが。
ICloudストレージを使う場合、各デバイス間で同じ書類を編集したときに発生する「バージョン競合」の問題があるが、
これは今回はどのように解決するつもりなの?
532 :
デフォルトの名無しさん :2012/07/07(土) 13:51:44.69
すみません、NSNotificationCenterにポストするNSNotificationについての質問なんですが、 別スレッドで非同期で実行されるブロックの中からポストされたノティフィケーションって、 オブザーバ側には、オブザーバのスレッドで通知されるんでしょうか。それとも、ポストした側 のスレッドの中で通知(ポストした側のスレッドでオブザーバのメソッドが実行)されるんでしょうか?
ポスト側のスレッド オブザーバ側のスレッドって何?
>>533 何というと? それぞれ別スレッドということです。
ネットワークからのダウンロード処理等の時間のかかる処理を別スレッドでバックグラウンドで
動かして、処理が終わったら、NSNotificationをポストしてメインスレッド側に通知させようと
考えています。 通知する側と、通知される側(オブザーバ)がそれぞれ別スレッドで動いて
いるということです。
オブザーバがスレッドに紐付けされてる(あるいは逆)わけじゃないんだから NSNotificationCenterはどうやってオブザーバのスレッドとやらを調べるの?
いや、そこまで詳しくないのでわからないです。 addObserverする時とかでしょうか?
AppleのNSNotificationCenterの説明に書いてありました。 Postした側のスレッドで動くみたいですね。 失礼しました。
本が一冊書ける
>>531 ありがとうございます。
版の解決は、タイムスタンプで古い方を破棄あるいはマージする予定です。
あるリストについては全体として整合がとれてないといけないのでタイムスタンプベースで上書き、
あるリストについては各項目が他の項目に非依存なのでマージ、という感じです。
なので全体としてファイルラッパでひとつのUIDocumentを構成するか、
各リストでひとつのドキュメントにするべきか迷うところなんですが、、、
ちなみに、アプリケーション1つに対し1種類しか生成されないシングルトン的なリストというのもあるんですが
そういう場合はファイル名をひとつしか作らないようにして、
あらかじめバンドル内に古いタイムスタンプのドキュメントを用意しておいてコピー→同期ですかね・・・
初回起動時に新規作成すると、その日付が最新になっちゃうので同期したときに別のデバイスで編集した結果が消えてしまいますよね
540 :
デフォルトの名無しさん :2012/07/08(日) 14:11:35.47
>>539 iCloudストレージでは、バージョン管理されたファイル単位で同期されるので、
ネットワークとの通信量を少なくしようと思ったら、物理的に小さなファイルを作るしかありません。
一つの大きなファイルをどうやって小分けにするのか、ということと、
小分けにしたそれぞれのファイルのバージョン競合をどうやって解決するのかは、両方同時に検討しなければならないでしょう。
> 全体としてファイルラッパでひとつのUIDocumentを構成するか
ファイルラッパーを使うのはいいけど、ファイルパッラー単位でバージョン管理してもダメですよね?
ファイルラッパーの中のファイルを個別にバージョン管理しないと。
そういゆ意味では、一つにUIDocumentが複数のバージョン付きファイルを取り扱う形になりますが、
UIDocumentのデフォルトの動作では、一つのバージョンしか取り扱えないんじゃなかったっけ?
> あらかじめバンドル内に古いタイムスタンプのドキュメントを用意しておいてコピー→同期ですかね・・・
> 初回起動時に新規作成すると、その日付が最新になっちゃうので同期したときに別のデバイスで編集した結果が消えてしまいますよね
そこがバージョン競合の難しいところですね。
ようするに、タイムスタンプだけでは競合を解決できないということですね。
別の方法を考えましょう。たとえばマージするとか。
Xcodeを使ってC言語を勉強したいんですけど、どうすればいいですか? ちなみに独習C第4版を勉強中です
542 :
デフォルトの名無しさん :2012/07/09(月) 14:53:54.79
>>541 そのまんま"xcode c"で検索したら山ほど情報があると思うよ
ここObjective-Cのスレだから
なるほど、あなたの言うことにも一理ありますね。
Objecive-Cはクラスの中身はCというか オブジェクト間の通信をメッセージという概念でやってるだけなんで たとえばインターフェイスビルダーで作ったUIから 数字を入力したアクションが飛んできたら 受け取ったあとのクラスの中身の処理はそのまんまCで書くだけだし。 俺も大学でC齧ったあとだいぶ間が空いてiOSでなんかやるかーと 趣味で復帰したんで、たしかにObj-C関係の入門や解説が Cをどっか別のとこでやった人にObj-Cを解説する感じのばっかりな現状なのは もうすこしなんとかならんのかなとは思う。
C自体の解説や入門は別に山ほどあるんだから、それは他所に譲るのは妥当。
547 :
デフォルトの名無しさん :2012/07/11(水) 00:35:47.36
LabelとTextFieldがあって、ボタンが押されたら LabelにTextFieldの数値を加算するメソッドで これをただ足すのではなく、数字がどんどん増えるようにしたいんだけど、 一気に増えちゃうのよね。どうすれば良い? 以下ソース - (IBAction)addScore:(id)sender { [self.view endEditing: YES]; NSInteger i; NSInteger j; i = [scoreText.text intValue]; j = [addScoreText.text intValue]; addScoreText.text = [NSString stringWithFormat:@""]; for (NSInteger l = 0; l <= j; l++) { scoreText.text = [NSString stringWithFormat:@"%d",i + l]; } }
>>547 NSTimer とか
そのメソッド内で NSRunLoop を回すとか
>>546 MSのC#とかも「Cと違うところだけ列挙するから、
まずどっかでCを学習してきなよ」ってスタンスなのかね
>>547 値を変えるblockを作りcompletionハンドラで次の値に変えるblockを再起的に呼び出すようにblockを呼び出す。
>>547 そのようなLabelのサブクラスを作る方がわかりやすいと思う
>>547 for (NSInteger l = 0; l <= j; l++) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
scoreText.text = [NSString stringWithFormat:@"%d",i + l];
}
だけでいいんだけど、回っている最中にボタンを押されるとリエントリーされるので、ちょっと工夫(インスタンス変数を持たねばならないとか)が必要
まあ、それ用のインスタンス変数を持たねばならないんだったらクラス分けたほうがいいよな
NSTimer で良いだろ。
NSTimer な間隔な繰り返しならねえ。考えたらもっと頻繁かなあと思った
これでどうじゃろ @implementation UILabel (Animation) - (void)animateFromCount:(NSInteger)firstCount toCount:(NSInteger)lastCount { __block void (^block)(NSInteger, NSInteger) = ^(NSInteger currentCount, NSInteger lastCount){ [UIView animateWithDuration:0.001 animations:^{ [self setText:[NSString stringWithFormat:@"%d", currentCount]]; } completion:^(BOOL completion){ if (completion) { if (currentCount < lastCount) { block(currentCount+1, lastCount); } else if (currentCount > lastCount) { block(currentCount-1, lastCount); } } }]; }; block(firstCount, lastCount); } @end
あ、アニメーションブロックに突っ込む意味なかったわ。
557 :
547 :2012/07/11(水) 14:25:30.71
みんな。回答ありがとう! まだ家に戻ってないので試してないんだけど質問です。 質問前は、forでループする前に画面更新の命令を1行追加する程度のイメージだったんだけど、実際のみんなの回答は結構複雑?でビックリ! どんな仕様でクラスやらNSTimerやら追加しなくてはならないのか教えてくれると助かる。 他の言語からの移住民なのでここがクリア出来れば、objective-cと仲良くなれそうな気がしてるw
>>549 C#はそもそも名ばかりのCなんで関係ありません
>>557 -addNumberをボタンから呼ぶ。
- (void)addNumber
{
int a = [label.text intValue];
int b = [field.text intValue];
targetValue = a+b; //メンバ
timer= [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(updateLabel)
userInfo:nil
repeats:YES];
}
- (void)updateLabel {
int value = [label.text intValue] + 1;
if (value <= targetValue) {
label.text = [NSString stringWithFormat:@"%d",value];
} else {
[timer invalidate];
}
}
>>557 Viewの更新(描画)を行うタイミング、及び、GPUのVRAMに書き込むタイミングのためという理由から
いまどきのどのOSでも似たようなもんだと思うけど
>>557 例えば、
scoreText.text = [NSString stringWithFormat:@"%d",i + l];
は、インスタンス変数 text を変えるだけで、描画はされない。フラグを立てるだけ
そのフラグをチェックして scoreText に描画させるのは NSRunLoop のどっかでの処理(だと思う)
クラスやらNSTimerはそうしたほうが、プログラミングとして綺麗というのだけといえばだけ
[label countUpAnimationForNumber:number]みたいなAPIがあると思ってたんだろ おそらくこいつはObjCとは仲良くなれない
NSTimer とかググればすぐに使い方分かるようなモンを一々人に訊いてるんだから、コイツはもう駄目だ。
>>562 ObjCなんて馴れ馴れしく呼ぶのもどうかと思うがなw
コードの命令ですぐにスクリーンに反映という、前近代的なものを想定しているんじゃないかと
馴れ馴れしいの意味がよくわからん。つかこのスレタイ馴れ馴れしかったのか。
>>565 マジにとるなよ
どうしてもおれはそれは「おぶじぇしー」と読んでしまうってだけだよ
いや、カウントアップをアニメーションさせたいのに、 一気に計算が終わってしまうからどうしようって事だろ、単純に。
あ、俺は尊敬を込めて Objective-C と呼ぶ。そういうので馴れ馴れしいなという あくまでも冗談の範囲でのことだからな
俺も「オブジェシー」って呼ぶが? おいジェシーって呼んでるように聞こえて ジェシーおいたんを呼び捨てにするとは何事だって憤ってるのか? そんなダニエルはタナー家にお帰りください
>>567 >forでループする前に画面更新の命令を1行追加する程度
らしいよ。usleepかましても画面更新されないよ
ぐちゃぐちゃだな
>>569 >憤ってる
何言っているの?強いて言うな違和感があるってだけだぞ。強いて言えばな。あほかw
ゴタゴタしてきたなw やっぱりLabelのサブクラスでやった方がいいよ 複数のラベルに同じ動作をさせたいとか、 複数のビューコントローラの管理下で制御したいとかで ドンドン奇怪なコードが生成されていくのが目に見えてるんだけど
うーん突っ込むところが全部ズレてるやつがいて面白くないな これがアスペか
>>572 究極(?)にはそれだね
プログレスバーみたいなもんといえばみたいなもんだしね
インスタンス変数って {}の中に宣言しないようになったのか。 サンプルコードとかみたらプロパティ宣言になってた。 それで気になったんだけど、クラス外からアクセスしないような変数もプロパティで宣言するのが今の動向なのだろうか?
クラスエクステンションという無名カテゴリが出来ました @interface Hoge() { // ここで } //プロパティ宣言も書ける @end 実装ファイルに書きます。 実装ファイル内なので、他から参照されません。 ObjCは柔軟すぎるので完全には隠せませんが。
@implementation にも書けるようになったよ
>>576 ありがとうございます
外部に公開しないものはヘッダに書かないほうがすっきりするな
連投で申し訳ない。 objective-cの規則(メソッドの命名規則とか、プロパティとそのインスタンス変数の名前は別のものにするのが良いとか)をまとめたサイトとかないのですかね。
Appleのデベロッパサイトにある。 あとGoogleのやつも参考にしてる。 でも最終的には俺ルールで書いてる。
ただヘッダーに書かないとサブクラスから使えないんだよね。
だってそういうものだものお。言うなれば private と public しかいらんだろうという インスタンス変数をサブクラスでも直で使いたいなら、昔どおりの記法でいいんじゃないの プロパティ(setter)なら、同じようにproperty宣言とdynamic宣言すりゃ使えるでしょ。いちいち書くの面倒だったらプロテクテッドヘッダにでも。でもなんかそりゃ違うだろうという
フレームワークとしてコンパイルする時に使わせるヘッダーを別にするとかで対応は出来るんじゃね
アクセス修飾子(アクセス修飾子)を使ってる人ってあんまりいないのかな。 そういえばサンプルでもあまりみないね。何でだろ? C++で書くときは割と厳密にそこらへん決めるのに。
間違った。 アクセス修飾子(@public、@protected、@private)ね。
@public とかキモくて
もともとその辺ルーズだし、最近は見える必要がないものは 実装ファイル側に書けるからもはやあんまり必要ないかも。 出来ればC++でもprivateメンバとかヘッダ側に書きたくない。
Java 「…
>>587 マクロ使えよ。
#define ZESSAN_KOKAICHUU @public
とか
>>587 いまさらそれだけがキモいというのがわからんな
@optional
@required
はどうなの?publicがキモいのはわかるが、とかだからなあ
引数でポインタ渡すより@publicの方がお手軽ってのはあるな。 アクセサメソッドを経由したくない場合は。
>>591 > @optional
> @required
は使い場所が @ public とは全然違うだろ。無いよりはあった方が良い機能としか思わんな。
>>593 意味わからんw
無いよりはあった方が良いとかじゃなくて、キモいって言っているんだぞ?
キモいけど、無いよりはあった方が良いってのだったら、そんなこと聞いていない
>>593 ちなみに
強いて言えば無いよりはあった方が良いのは @public、@protected、@private な
@optional (@required) な無かったら困る機能だからな
よーく考えような。いろいろとw
いやお前の価値観なんて知らんよ。
たかが言語の修飾子をキモいって感性がわからん。 好きとか嫌いとかならまだ分かるがキモいって.. キモいって言葉使っちゃう俺ってオシャレ? ってことなの?
>>596 俺の価値観?
今のDelegateは@optionalに依存しているんだけど、知らないんだったらしょうがないなあ
>>597 まあ、そういうもんだろ。人とは違う俺オシャレというw
@Optionalって2.0(Leopard)からだよな。 それまではなくてもなんとかなったってことか。 プロパティ構文が導入されてドット表記と []のメッセージ送信が入り乱れるのが見た目的にあれかな メッセージ送信のみで書いた方が揃うかなー だったら代入もメッセージ送信にしたほうがLispみたいで揃うかな
>>600 以前はDelegateメソッドはカテゴリで宣言していた。受け側は単なる id
明確化のためにプロトコルに変えたんじゃないのかな。@optionalはDelegateのためにってこでも言い過ぎではないかな
obj-c最近勉強してみた感想 長い。
>>602 Cなのに80文字に収まらないのが気持ち悪い
NSとCFで一番長いメソッド名ってなんだろ
識者に聞きたいんだけど
#importって.hと.mのどっちに書いた方がいいのかな?
使うやつ全部.hに書いて.mは.hのみimportっていうやり方なんだけど
あくまでそのファイルで必要なだけのやつのほうがいいかな
.hならプロトコルとか。あと@classを使って最小にするとか
ライブラリ系のヘッダは.hでインクルードしていいと思うけど、自作のヘッダは 必要なら .hには@classで名前解決だけして、実際のインポートは.m でやる のがオサレだろ。 使うヘッダを片っ端から.h でインクルードしてるソース見ると、あ、こいつ 分かってないなと思う。
>>604 でもそれって素の#includeでの問題のためだよね。#importは別にそんなに気にすることじゃない
それとは別にヘッダーでヘッダーを#importするとリコンパイルする範囲が広がる可能性が高いってのはあるが、それは別にヘッダーでヘッダーを#importすると必ずというわけでもないので、言うような2値で判断出来る要素ではないと思うけど
好きにすばいいことじゃない。まあAppleの流儀は言うような形のようだけどね
まぁ最近はコンパイル時間も短いからソースが数10個程度の小規模なプロジェクトなら それでもいいだろうが、ある程度大きなプロジェクトでトライ&エラーの繰り返しで開発して いくような人にはコンパイル時間の差も馬鹿にはならないだろ。 ためしに、プロジェクト名-Prerfix.pch を編集してコンパイルしてみ? 全ソース のコンパイルが始まるから。この時間が苦にならないようなら、好きにすれば いいんじゃね?
facadeパターンで使うものを全てヘッダでimportする こんなのどう考えてもおかしいだろ? 俺を使うにはこいつらが必要だ!てのはヘッダで他は全て実装ファイルだろ
>>607 何を言っているかわからないが、そんな基本的なこと言っているのだったら、ヘッダーにヘッダーを入れるなというあなたも2値でしか考えられない人なんこあというのはわかるなw
ヘッダーにヘッダーを取り込んでも必要最小限度に抑えれば好きにすればいいってことだぞ?
あんたのプロジェクトは循環しまくっているのかなんなのが、そういうことをしたらプリコンパイルヘッダーみたいに全部が影響を受けるのだろう。設計を見なした方がいいなw
#include は重複して読み込むのはデフォルト #ifndef HOGEHOGE_H や #pragma once はヘッダーで定義しているので、ヘッダーを読み込まなければわからないので、同じファイルを何度も読みこむようなことになるだろう。ヘッダーでヘッダーだと #import はヘッダーは一度しか読み込まない仕様だよ?
>>608 俺を使うにはこいつらが必要だ、でも @class だけでヘッダーは実装ファイルじゃなきゃダメだという頭の固いのがわけわからんことを言い出しているんだけど
別にどっちでもかまわないことだろう
このクラスを使いたいからこのヘッダーをというのは理にかなっているし、簡単で別にかまわないことなのにな
極端に言いえば、このクラスを使いたいのだがこのクラスはあのクラスも使っているからあのヘッダーも、あのクラスはあっちのクラスも使っているのであっちのヘッダーもってめんどくさっと思うけど、別にそれはそれで勝手にすればいいことではある
趣味の範囲の話だなw
前方宣言とインクルードガードじゃ目的がぜんぜん違うじゃないの。
うん、そのふたつは全然関係ないよ。結びつけるとは思わなかったw ヘッダーでヘッダーをという問題で、何を問題にしているか具体的にわからないから、これも問題と見なしているのであればって話
>>603 こういう低レベルな奴の相手するのがそもそもの間違い。
>>609 ヘッダで極力他のヘッダをインクルードしない方がいいうというのはこういうこと。
a、b、c、d、e というクラスがあったとしよう。
c,d,eはそれぞれbに依存し、bはaに依存する。
[a]
↑
[c]-->[b]<---[e]
↑
[d]
c.h、d.h、e.hでそれぞれがb.h をインクルードし、b.h はa.hをインクルードしたとしよう。
この場合、クラスaのインターフェースが変わり、a.hを修正すると、bだけじゃなく、cもdもeも
つまり、全部コンパイルしないといけなくなる。(ヘッダが依存関係を持っているので)
ところが、それぞれがヘッダではなく、ソース(.mの方)でインクルードしていたとすると、
a.h の修正による影響を受けるのは、bだけで、c,d,e自体は再コンパイルの必要がない。
(もちろん、c,d,eが直接aを参照していないことが前提だが)
つまり、コンパイル時間に影響するというのはそういうことだよ。本来必要のないソースまで
再コンパイルされてしまうということ。
プロジェクト名-Prerfix.pchは全てのソースから参照可能なので、これを修正すると全ての
ソースの再コンパイルが必要になる。
>>597 @public 使うような設計がキモいんだよ。
オシャレとか何言い出してんのお前。
出た♥ 自分の感性に合わないことは断固として認めない昭和の頑固オヤジw 柔軟性の欠片もない凝り固まった頭でキモいキモいを連発w
なんでもあり感とかお手軽感とかの事だと思うが、 キモいって程じゃねえなあw
ObjCの場合、アクセス修飾子は飾りというか作成者の願いというかw
コメントに近いよねw
>>597 たぶん昔の「あんたたちイモね」ってのと同じレベルの慣用表現太と思うよ>「キモイ」
ダサいみないなもんか。 オサレが昔のナウい?
ヤバイ
624 :
デフォルトの名無しさん :2012/07/20(金) 13:35:41.52
質問なんですが、 画面の数分の1くらいの大きさのModalを表示させて、残りの部分は、 裏側のViewが見えたまま、みたいな事をしたいんですが、StoryBoardで実装できますか? Modal用にViewControllerを用意してSegueで繋いでStyleをModalにしても、 Modalが全画面表示みたいな感じになってしまって困ってます
日本人は、先進諸国で飛び抜けてマスコミ報道を鵜呑みに
信じやすいことがこの動画で実証されています。
いわばマスコミ報道の「鵜呑度」を国際比較すると、
日本人は、先進国中ダントツに「鵜呑度」が高く70%、
最も低い国民は英国で14%です。
その他の主要欧米諸国(ロシアを含め)は20−35%です。
日本に近い国は、ナイジェリア、中国など、途上国と新興国となります。
別の言い方をすれば、日本人の70%は、
自分の頭で考えず(思考停止)、
テレビ、新聞、週刊誌などのマスコミの情報を鵜呑みにしていることを意味します。
青山は以前からこれを「観客民主主義」と言っています。
観客民主主義は、マスコ ミの情報操作による世論誘導に最も陥りやすく、
独裁にも呼応しやすい特性を持っています。
マスコミ報道「鵜呑度」
日本人70%、英国人14% You Tube
http://www.youtube.com/watch?v=ypPqsWUC6Vo http://www.asyura2.com/12/senkyo132/msg/578.html
質問です。__weak修飾子について調べていたのですが、 下記の1回目のNSLog()をコメントアウトすると2回目のNSLog()で aにnilが代入されているのですが、これはなぜでしょうか? NSLog()がaを保持するのでしょうか? __weak id a; id b = [[NSObject alloc] init]; id c = [[NSObject alloc] init]; a = b; NSLog(@"a:%p", a); // このNSLogをコメントアウトする次のNSLog()のaはnilが代入されている b = c; NSLog(@"a:%p", a);
>>627 b=cした時点でbからリテインされていたオブジェクトがreleaseされaからリテインされてないからdeallocされてaがゼロ化される。
629 :
627 :2012/07/22(日) 18:11:57.00
自分の質問の仕方が悪かったです
>>627 のコードをそのまま実行すると
2回目のNSLog()の時にaがゼロ化されていないのですが、なぜでしょうか?
本当ならゼロ化されてnilになってるはずだと思うのですが。。。
>>629 最初のNSLogの中で a の中身が autoreleasepool に積まれてるみたいだ。
だから b=c しても、元々bが指してたものは生きてる。
>>624 できる。presentModal はフルスクリーンにしかならないので、CustomSegue と、ViewController で自分でそういうタイプのモーダルにする
すみません 教えてください。 自分のiphoneではエラーがでなく、他人のiphoneにてエラーが出てしまって、わけわからずにいます。。。 どうやら、uiimagepickerがメモリリークを起こしているのかと思っております。ただ改善方法がよくわからずにいます。 ソースは下記のような形になってます。 - (IBAction)button02:(id)sender { @autoreleasepool { imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.showsCameraControls = NO; imagePicker.delegate = self; cameraOvarLay.imagePicker2 = imagePicker; [imagePicker.cameraOverlayView addSubview:cameraOvarLay.view]; [cameraOvarLay setCameraOverlay:[delegate selectedNumber]]; [self presentModalViewController:imagePicker animated:YES]; } } ちなみに、imagePicker変数は、同クラスのviewDidLoadにて、UIImagePickerをallocしています。 このクラスは、最初に呼ばれるとその後呼ばれる事はありません。 autoreleasepoolが問題なのでしょうか?ARCは使っています。 なぜ僕のiphoneだと出ないのでしょう??4s ios 5.0.1
エラーの内容くらい書け
エラーもなくて困っています。エラーあればそれをたどれるのかもしれませんが。。。 よく出るのが、 error: failed to launch '/Users/apple/Library/Developer/Xcode/DerivedData/uiview-fcgzokzioetqhoattzkqljnkymwt/Build/Products/Debug-iphoneos/uiview.app/uiview' -- failed to get the task for process 1968 なのですが、何かわかりますか?CodeSigningIdentityで、ディストリビューションを設定するとこの現象に陥ります。
朝鮮猿っていつまで経っても、結局日本の後追い猿真似しか出来ない寄生虫民族なんだよね
属国の歴史しか無くて、ずっと独自文化がゼロなのはなぜなのか本当に良く判るわw
< #`Д´> <うぎゃああああ!!フランス人までネトウヨの嫌韓厨だったニダーーー!!!ネトウヨ!ネトウヨ!ネトウヨ!!
■フランスメディア「KPOPに独自性は感じられない」「日本や米国の模倣」「商業主義」「つまらない」
パリで韓流コンサート「日本文化から韓国を知った」
2011/06/14(火) 09:45
一方、コンサートが終了した現在、当日の模様について報道しているフランスのメディアは
比較的少ない。この状況下、コンサートの模様を報じているのは、フランスのニュースサイト「Rue89」だ。
中でも目立つのが、K−POPは特に独自性が感じられないという意見だ。これまでフランスでファン層を
増やしてきたJ−POP、ひいては米国のポップスを踏襲しており、商業主義的な音作りだという意見や、
演奏がコンピューター管理されているためか野性味に欠けるといった意見が寄せられている。
http://news.searchina.ne.jp/disp.cgi?y=2011&d=0614&f=national_0614_016.shtml
お前らホント韓国ネタが好きだよな
お前らっつてレスしても逃げててわからんだろ。逃げてってかあれがあいつらの活動wなんだろうけど 街宣右翼の張り紙や極左のビラまきといっしょ。内容的にもの挑発的攻撃的なのが似ているし
639 :
デフォルトの名無しさん :2012/07/26(木) 00:36:08.43
なんか、Objective-Cの文法がアップグレードしたなぁ @synthesizeが省略可 NSArrayとNSDictionaryとNSNumberのリテラル追加 NSArray* list = @[@11, @22, @33]; NSDictionary* map = @{@"name":@"Red", @"value":@"#FF0000"};
640 :
デフォルトの名無しさん :2012/07/26(木) 01:23:36.09
さっそく@synthsize一掃したんだけど 変数名が_プロパティ名になるのって公式にはどこに出てるの? WWDCのスライドしかみつけられんかった
@property が初出の頃
なわけないだろ
@interface Hoge { id _hoge; } @property (noneatomic,retain) id hoge; @end @implementation @synthesize hoge; @end とした場合に、_hoge に自動的にアサインされるってことだよ。id hoge; でもアリだがな そういう流れだし、インスタンス変数名に _ のこだわりを持つAppleだから不思議ではない。どっちにするってときに
スイスに極右政権が誕生!! 外国人の生保受給者・軽犯罪者を永久追放、祖国強制送還へ
http://engawa.2ch.net/test/read.cgi/poverty/1343227547/ スイス、外国人犯罪者を追放へ 生活保護の不正受給も対象
スイスで28日、特定犯罪をおかした外国人を自動的に
国外追放する法改正の国民投票が行われ、賛成52.9%で承認された。反対は47.1%だった。
特に、スイス人口の大半を占めるドイツ系住民の賛成票が多く、全26州のうち否決はわずか6州だった。
今回の国民投票は極右政党「スイス国民党(SVP)」が主導したもの。現行法では、
有罪となった外国人に対しては判事の個別判断で国外追放処分とすることができたが、
改正新法では、特定の犯罪で有罪判決を受けた外国人は自動的に国外永久追放となる。
対象となる犯罪行為には、強姦、深刻な性犯罪、強盗などの暴力行為、麻薬密輸のほか、
生活保護の不正受給も含まれる。
www.afpbb.com/article/politics/2776977/6517971
645 :
デフォルトの名無しさん :2012/07/26(木) 20:15:22.91
getterメソッド実装しちゃうと、@synthesizeが省略できなくなるようだ
@interface Hoge
@property int boke;
@end
@implementation Hoge
// @synthesize boke = _boke; ←これ必要
- (int)boke {
return _boke; ←エラー
}
@end
>>643 >640が言っているのは、そういう話じゃないと思うぞ
646 :
640 :2012/07/26(木) 22:35:04.77
>>645 情報サンクス
そうそう。以前だと
@synthesize プロパティ名
だけだとプロパティ名と同名のプライベート変数が出来てたよね
643のコードだとhogeと_hogeが同時に存在してしまう
647 :
デフォルトの名無しさん :2012/07/26(木) 23:47:51.33
xibファイルのBase Internationalizationもなかなか良い
ARCについて質問です。 この本の45ページのサンプルを実行してみたのですが、 本に書いてあるような実行結果になりません。どうして? サンプル --------------- id __weak obj1 = nil; { id __strong obj0 = [[NSObject alloc] init]; obj1 = obj0; NSLog(@"A: %@", obj1); } NSLog(@"B: %@", obj1); ---------------- 本に書いている実行結果 A: <NSObject: 0x753e180> B: (null) ---------------- やってみた結果 A: <NSObject: 0x6a16a60> B: <NSObject: 0x6a16a60> <- 破棄されていないしnilもセットされてない。 スコープから外れても必ずしもすぐに破棄されるとは限らないってこと? 教えて!エラい人。
>>648 書籍の名前は「エキスパート Objective-C プログラミング -iOS/OS Xのメモリ管理とマルチスレッド-」です。
ISBN: 9784844331094
>>650 直前に同様の質問があったとは!面目次第もございません。
NSLogをコメントにしてデバッガでトレースしたところ確かに本の結果となりました。
ありがとうございました。
>>645 WWDC 2012 Session 405 によれば
readonly propertyの場合
getterを実装すると自動@synthesizeが無効化される
readwrite propertyの場合
getterとsetterの両方を実装した時のみ、自動@synthesizeが無効化される
どちらか片方だけの実装では無効化されない
なので、その場合はエラーにならないはず。
653 :
デフォルトの名無しさん :2012/07/28(土) 00:48:17.80
>>652 なるほど。
実はあの後、いろいろコードを弄っているうちにエラーが出なくなってしまった。
最初、getterを実装した瞬間にエラーが出たのは、Xcodeのエディタの誤動作だったのかもしれない。ビルドを試しておくべきだった。
@interface Hoge @property (noneatomic,retain) id hoge; @end @implementation{ BOOL isNani; } @end
655 :
デフォルトの名無しさん :2012/07/29(日) 00:49:18.95
iPhoneアプリを(主にゲーム)を作れるようになりたいのですが
Objective-Cは下記のサイトの各項目を読んだ程度でホントに基本的なことしか分かりません。
http://www.atmarkit.co.jp/fcoding/index/objc.html 特にやりたい処理にどういった命令を使えばいいのかなどさっぱり分からない状態です。
そういった部分も含めて「これらを熟読すれば大体作れるようになる」とオススメするサイト・書籍はありませんでしょうか?
情報関係の知識は基本情報・応用情報をもっている程度で、
プログラミングの知識はCやCOBOLなどで本当に簡単で事務処理的なプログラミングができる程度です。
ポインタも理解はしています。
Appleが出してる資料でまずは日本語化されてるやつから。
657 :
デフォルトの名無しさん :2012/07/29(日) 01:48:02.49
>>655 例えばどんなやつ?
標準のUIKitで実現可能なやつもあれば
OpenGL周辺のライブラリやら
Core XXXXのライブラリをがしがし書くのを覚えた方がいいのもある
ポインタを完全に理解しているなら俺から教えることは何もない!
>>657 どんなというとゲームの種類についてでしょうか?
一番初めに作ろうと思っているのはチャリ走にもっとボタンをつけたようなゲームです。
ステージの続き?をランダムで描画させたりしないといけないですよね?
自分が作ろうと思っているゲームは2Dゲームのみで、ゲームに必要なボタンや文字などはほぼすべて画像を用意するつもりです。
聞きたい内容と違っていたら申し訳ありません
個人でiphoneアプリ、Windowsアプリをマーケットに売って生き残れ javaやlinuxは手間がかかる 一人でやるには手間がかかりすぎる 手間がかからないで一人で開発できて 人の多いところで直接販売できる仕組みが提供されているメーカ製言語だけやる ずばりiphone またはWindow 8 Metro App Store C# やるならメーカー製の言語 洗練された仕様 脆弱性が少なく 開発ソフトが優れ 課金ライブラリ アップデートライブラリが提供されていて 情報、書籍が多く開発しやすい 奴隷になりたければオープン系をやればいい 時間がかかり 人は多く 仕事の取り合い 足の引っ張り合い 脆弱性が多く 互換性がなく 癖があり 大規模開発中心 詳細設計しかやれない体になって年取ってぽいだ 独立もできない 手間のかかりすぎる仕様だから 派遣屋 IT経営者はその方が喜ぶ 大規模分割開発では使い捨てても独立はできまい 代わりはいくらでもいる 嫌なら辞めろ 若い派遣営業は舐めた態度をとってくる ひどいピンハネ オープン言語、日本独自開発の言語・フレームワーク ガラパコ携帯 javascript html5 android java linux python rubyやnode.jsとかやめとけ メディアに金を払ってステマ宣伝してくるが釣られて手を出しても情報は少なく手間がかかり スパゲッティコード 未完成 デスマに陥る コンパイルできないからパクられ 直接売る場所がないから企業に買い叩かれ金にならない 生きていけない奴隷仕様だ ここから抜け出すにはiPhone一択 またはWindow 8 Metro App Store(未確) C# Objective-CやC#を覚えるとサーバーサイドからクライアントサイドまでカバーでき人の多い場所でソフトを売る権利を得られる 仕事や趣味でこれらの言語をやっておけば派遣切りされても会社辞めることになってもソフトを売って生きていける それはセーフティーネットになる WEBサーバーIIS Win2008ServerVPS SqlServer Oracle MySql 言語はマーケットで売れるメーカー製のみ C#は自分用業務支援ツールとして使える 例えばPHPでWEBアプリを作っていて管理者画面はC#(EXEアプリ)で作るとかなり早く作れる(Smartyなんか使うよりもかなり早くだ)
すみません @compatibility_ariesコンパイラディレクティブって何に使うんでしょうか?
はてなにあったtyype、これすごくない?
NSThreadで起動したスレッドの内部で、オブジェクトのbool型変数がFALSEに なるまでwhile()ループする処理を入れています。 で、ループの直前でNSTimerでタイマを仕掛け、タイマ発火時にFALSEにする ようにしましたが、ループが回っている間はタイマが発火しなく、無限ルー プなってします。 ループの最後に[[NSRunLoop currentRunLoop] run];でメッセージを処理さ せるようにすると指定時間でタイマが発火するのですが、runから処理が戻る まで3秒以上かかってしまっていて、使えません。 Windowsですと、スレッド内でSetTimer()すると無限ループ中でもタイマ イベントが発火するのですが、Macではどのようにしたらいいのでしょうか?
自分ならタイマーじゃなくてもう1個別のスレッドで待つかな。
>666 もう一個別のスレッドでタイマを仕掛けるんでしょうか? 今、ループ直前のタイマセット処理を別スレッドに移動して、タイマセット 処理を書いていたところにNSThreadを起動するようにしてみたのですが、 だめでした。
>>665 >NSThreadで起動したスレッドの内部で、オブジェクトのbool型変数がFALSEに
>なるまでwhile()ループする処理を入れています。
出発点がそもそもおかしいと思うが。
普通はセマフォとかメッセージ待ちにするでしょ。
行儀悪いけどこうやれば3秒後にループから抜けられるよ。 __block bool done = false; dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ sleep(3); done = true; }); while (!done) {}
>>668 同期したいんじゃなくて、一定時間だけ処理させたかったんです。
>>669 結局、それに近い処理で実装してみました。
ループ前にNSDateで現在時間を取って、ループの最後でtimeIntervalSinceDate
で差を取得し、指定時間が経過していたらbreakするように。行儀悪いですが、
ひとまずは目的は果たせています。
スレッド内でのループ処理をタイマで抜けるようにする手法はないんでしょう
かね。
>>670 >結局、それに近い処理で実装してみました。
近くねえじゃん。
>>670 NSTimer の説明よく読んでみ
NSTimer は NSRunLoop 内でってことなんだから、定期的に NSRunLoop 呼びださなきゃダメやん
そういう意味でも出発点がかしいと思う
NSRunLoop ですぐに戻ってきて欲しい場合は run じゃなくて runUntilDate: 使えばだけど、Timer 使いたいってのがわからない/使わないそれと変わらないので、それでいいんじゃないの
>>670 ループ回るのにミリ秒単位で時間かかるなら、これで十分だよ。
const CFAbsoluteTime timeOut = CFAbsoluteTimeGetCurrent() + 1.0; // 1 sec timeout
do {
}while (CFAbsoluteTimeGetCurrent() < timeOut);
674 :
デフォルトの名無しさん :2012/07/31(火) 18:46:46.13
>>672 > NSTimer は NSRunLoop 内でってことなんだから、定期的に NSRunLoop 呼びださなきゃダメやん
定期的にNSRunLoopを呼ぶよりは、そのループ処理そのものを一つのタスクとしてNSRunLoopにスケジュールした方がいい。
そして、自身のタスクを再帰呼び出ししてループする
- (void)Looping:(id)arg
{
// ループ処理
[[NSRunLoop currentRunLoop] performSelector:@selector(Looping:) target:self argument:arg order:1 modes:@[NSDefaultRunLoopMode]];
}
タイマー処理で、上記のLooping:のスケジュールをキャンセルすれば処理終了
>>674 それって、本当に再帰ってかどんどん深入りしているようだけど?
本当にした方がいいのか?
え? いやしてないぞ。 performSelector:target:argument:order:modes: は @selector(Looping:) 呼び出し命令を登録するだけ。 実際に呼び出す前に返ってくる。
みなさん、色々ありがとうございます。
>>672 > NSTimer は NSRunLoop 内でってことなんだから、定期的に NSRunLoop 呼びださなきゃダメやん
これは、僕が最初に書いた[[NSRunLoop currentRunLoop] run];でしょうか。
特にタイマが使いたいわけではないんですが、スレッド内で一定時間だけ処理して、
時間が来たらそこまでで処理を終わる、ということがしたかっただけなんです。
ずっとWindowsプログラマだったので、こういうときはタイマを使っていたので、
その頭でMacプログラムでも同じやりかたをしたというだけなんです。
>>673 おっ、これは僕が最終的に書いたNSDateの比較より、少し綺麗ですね。
ループ処理中は、外部からのイベントなどでループ処理を抜けることは考えて
いないので、開始時間から指定時間経過するのを毎回チェックすればいいやと
考えているところです。
>>674 これは、ちょっと僕の知識では追いつけないです(^^;
本読んで、がんばって理解してみます。
@YESとか@NOのリテラルって本当に使えるんでしょうか? @trueとかは使えるのですが@YESとか@NOリテラルはコンパイル時にエラーになります。
679 :
デフォルトの名無しさん :2012/08/02(木) 19:56:45.36
>>678 こっちでは、使えたけど?
@YESや@NOだけじゃなく、@'a'とか、@( object1.intValue + object2.intValue )なんかもOKだったよ
>>678 clangのバージョンが古いとそうなる
ありがとうございます。 compilerはApple LLVM Compiler 4.0なんですが、古いですかね。 @[]とか、他のリテラルは問題なく使えるのですが・・・。
2012年8月19日フジテレビ抗議デモinお台場 告知動画
http://www.nicovideo.jp/watch/sm18497988 8月19日 フジデモ一周年 お台場フジテレビ抗議デモ 告知動画
http://www.nicovideo.jp/watch/sm18468199 【告知】8・19フジデモ一周年inお台場
http://www.nicovideo.jp/watch/sm18413040 かつての「視聴率王」も今は昔――フジテレビに異変が起きている。
2004年から7年間、年間視聴率3冠王に君臨していたが、昨年、日本テレビにその座を奪われたのに始まり、
オダギリジョーが主演した今年4月期のドラマ「家族のうた」は、視聴率3%台で打ち切り。
さらに4〜6月期の平均視聴率はテレビ朝日にも抜かれ、3位に。7月には「3冠王を逃したため」(フジテレビ関係者)、
局長やプロデューサーなどが大幅に入れ替わるテコ入れがなされたが、"迷走"は止まらない。
その一例が情報番組「とくダネ!」だという。
言わずと知れた小倉智昭がメーンキャスターを務める朝の看板番組だ。
同局の人気アナ、ナカミーこと中野美奈子の退社に伴い、
7月からキャスターに抜擢されたのがタレントの菊川怜だったが、その評判が芳しくない。
「同じ時間帯では、日テレの『スッキリ!!』と『とくダネ!』が視聴率を競い、これまではフジが優勢でした。
週5回の放送で負け越しが続くなんてことはほぼなかったのですが、菊川に代わった翌週から、1勝4敗が2週続きました。
扱うニュースなどにもよるので一概にキャスターの責任にはできませんが、菊川が原因だという声がもっぱらです」(番組関係者)
一方、菊川の起用と同時期にあった人事異動が業界で臆測を呼んでいる。情報制作局長や情報制作センター室長、
番組のチーフプロデューサーらが軒並み交代したのだ。テレビ局では、長く続いた番組を終わらせたり、
「大物」キャスターやタレントを降板させたりする際に、局側も相応の立場の人間が異動するのが慣例とされている。
「大物の降板などと同時に異動する局もあるが、フジは必ずしもそうではない。
今度の人事異動は、小倉さんの降板をにらんだもの、という声があります」(同)
もしかして、小倉さん、最後の夏!?
▽週刊朝日
http://www.wa-dan.com/article/2012/07/post-968.php
683 :
デフォルトの名無しさん :2012/08/04(土) 23:09:38.61
@YESってなんだよ。。BOOLのYESと何が違うん? いらなくね?そんなの。。
[NSNumber numberWithBool:YES]
686 :
デフォルトの名無しさん :2012/08/05(日) 01:10:11.38
ったく、どいつもこいつも楽することばっかり考えよって
可読性はどうなん?
すみません iOSだとiOS SDK 6.0まで使えないんですね @(YES), @(NO)なら使えるようで あるいは #define YES (1) #define NO (0)
-(id)init { Test *x =[Test ~~~]; } -(void)lol { [x ~~~]; } selectorを使ってlolを呼び出すとxが使えません。 どのようにしたらいいでしょうか?
>>689 訳わからん。変な記号や省略使わないで普通に書いてよ。
つかなんでinitでsuper initしてないの?
>>690 すみません、省略してました。
hでTest *x;を宣言してmで
-(id)init
{
x =[[Test alloc]init];
}
-(void)lol
{
[x abc];
}
@selectorを使ってlolを呼び出すとxは使えないのでしょうか?
>>691 ???
なんでinitでallocするの?
あぁ、いやTestをalloc initするのはいいんだけど、自分自身をsuper initしろよまず
init云々はおそらく関係ないからどうでもいいんだが >hでTest *x;を宣言してmで >@selectorを使ってlolを呼び出すとxは使えないのでしょうか? どう宣言したのか 何故使えないと判断したのか そのあたりをちゃんと書けよ
[NSCFString count]: unrecognized selector sent to instance のエラーでした
countなんてmethodがどこに出てくるんだよ
^^;
関係無さそうだと判断して変に省略するから そこに原因があることに気がつかない。
しゃーない 夏だから
------------- .h ------------ IBOutlet imageview* hoge; NSArray* array; UIImage* img; -------- .m -------------- array = [ [ NSArray alloc] init ]; //xmlのリストを取り込んで、配列に登録 NSBundle* bundle = [ NSBundle mainBundle ]; NSString* path = [ bundle pathForResource:@"omake" ofType:@"plist" ]; array = [ NSArray arrayWithContentsOfFile: path ]; // indexを指定してobjectを読み出し for (int i = 0 ; i < 5 ; i++ ) { NSString *str = [array objectAtIndex:i]; NSLog(@"index = %d ; object = %@", i, str);} 中略 - (void)imagexxx{ int i = 1; //配列からファイル名を取り出して、画像のインスタンスを生成 NSString* str = [array objectAtIndex: i ]; img = [ UIImage imageNamed: str]; //imageviewに画像を反映させる hoge.image = img; } ※ omake.plist には5つのpng画像を Strings Type で登録しております。 これを実行すると *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x147330' *** Call stack at first throw: と、エラーが出るのですが、何が問題かわかりませんでした。 NSString* str = [array objectAtIndex: i ]; この部分がダメらしいのですが、 何が間違っているのかご指導いただけませんでしょうか。 よろしくお願いいたします。
でじゃぶ
おお、これが噂に聞く問題解決力のない御仁か
答えられないのにどっちにも張り付いてるクズいるんだなぁ
>>701 http://anago.2ch.net/test/read.cgi/mac/1342965470/ ID:BAsdE3f70 なんだろうけど、死んでほしいようなヤツだが、
[NSCFString objectAtIndex:]: unrecognized selector...
ってメッセージ出てるんだから、array が NSString インスタンスにすでに置き換わっているんだろ
NSLog( @"%@", array );
ってしてみりゃわかることじゃん。そんなコードだけ示されてもわからんし、そんなこと自分で追っかければわかることだろう
「初心者」から逃げてきたようなのできつめに言ってみたw
なんか湧いていたw って言いながらなんにも答えていないってのがわからないんだからしょうがないなw
707 :
デフォルトの名無しさん :2012/08/06(月) 23:23:56.86
だって俺が書いたらそのコード動くもの 書かれていない部分が間違ってるとしか思えん そんな部分に対してここが間違ってるよなんて、それこそエスパーじゃないと無理
「だって」が何がだってかわからんw 同じ事言っているよーな
レベルの低いプログラマに全米が泣いた
Edit Scheme… Run xxx Diagnostics Enable Zombie Objects
つーか static analyzer でも使えばすぐにわかりそうなもんだが。
array = [array objectAtIndex:0];
だと、static analyzer でも出ないようだけど。もちろんコンパイルのワーニングも
>>701 だとやりそうだけどw
間違いなく、どこかで array に NSString 突っ込んでるんだろうな。 早く死ねばいいのに。
だから array = [ [ NSArray alloc] init ]; はいらないって言ってるだろう。
704=706=708=714の必死さが凄いw
>>716 すごいエスパー力だなw
>>702 ,705,706,708,712
だったんだけどな。スッキリしたか?まあお前が必死と思うなら必死でいいけど
すごいエスパー力なのはわかったから、もう出てこなくていいよw
よかったな。
>>717 ワロタw
自己申告は偉いけど必死すぎだろw
>>719 こんなんで必死ってお前のその範囲ってえらいちっちゃいなあ
「偉い」とか言っちゃうんだからマジでちっちゃいんだろうなあw
721 :
デフォルトの名無しさん :2012/08/07(火) 02:15:09.75
必死w
objcが人の心を荒ませる言語だということはよーくわかった
723 :
デフォルトの名無しさん :2012/08/07(火) 03:41:41.69
このスレ他の言語に比べると荒れてなくてよかったのに やっぱ夏だからか
だな。最近のは人(難癖つけたいの)目当てのばっかだからな
スルーすればいいのになんでいちいちバカ丁寧に相手にするんだろう それも夏だからか?
727 :
デフォルトの名無しさん :2012/08/07(火) 09:42:59.78
ここにいる誰も気に喰わない奴に対して回答する義務はない
>>725 暇だからw暇だからちょっと相手してやるってぐらいだけどな
難癖つけたがりは過疎っている所に出やすいよなあ。そういうのでも小心者ってはっきりわかるんだけど
夏だなぁ
雑魚「夏だなぁ」
732 :
デフォルトの名無しさん :2012/08/08(水) 18:38:10.65
プログラムの基本的なことかもしれませんが質問させてください 現在、iPhoneのアプリを作成中です。 同じような処理をほぼ同時に(少し時間差をつけて)3つに分けて処理させてようと思っています 処理の過程で他のクラスで「3つの内のどの処理を行うか」という判断のフラグ処理で悩んでいます スマートなプログラム書きたいんですがフラグの参照方法がこれぐらいしか思いつきません。 ・グローバル変数に設定する ・引数で渡していく isRecordingのように何かの状態を見て判断させる手もありますが、状態変化で判断する所もなさそうです 他のクラスの中でデータの削除->保存->参照というのをやっていくのでどうしても 「3つの内のどの処理を行うか」という判断が必要になります なにかいい方法があれば教えてくださいm(__)m
LEDをフラグ代わりにする
734 :
732 :2012/08/08(水) 18:44:41.33
すいません、少し修正です > 同じようなデータをほぼ同時に(少し時間差をつけて)3つに分けて処理させてようと思っています > 他のクラスの中でデータの削除->保存->参照というのをやっていくのでどうしても 3つのデータを「他のクラスの中でデータの保存->参照->削除」するためのフラグ処理です 説明がわかりにくくてすいません。。。
LEDをフラグ代わりにする
736 :
732 :2012/08/08(水) 19:01:36.81
> 735 レスありがとうございます。 LEDをフラグ代わりというのはどういうことでしょうか??? フラッシュをピカピカ光らせるということですか???(^^;;
質問してキーワード貰ったら最低でもググれよ
738 :
デフォルトの名無しさん :2012/08/08(水) 19:11:04.35
>>732 > 説明がわかりにくくてすいません。。。
謝るまえに、もっと分かり易く説明してくれ。
何をしようとしているのか、いまいちよく分からないぞ。
で、これってマルチスレッドな話なのか?
スレッド1: 保存処理 -> 参照 -> 削除処理
スレッド2: 保存処理 -> 参照 -> 削除処理
スレッド2: 保存処理 -> 参照 -> 削除処理
こんな感じ?
それで、話に出て来る「他のクラス」って、いったいなんなの?
それから、ここでいう「データ」って何?
739 :
732 :2012/08/08(水) 19:23:12.62
>>737 一応ググったんですが普通にフラッシュの光らせ方しか出てこなかったもんで・・・
ソースコードも見てみましたけど、フラグに使えるんでしょうか?
>>738 ご指摘の通りマルチスレッドを使った1->2->3という処理です
「他のクラス」はマルチスレッドをスタートさせるところ以外のクラスです
「データ」は画像データです
740 :
デフォルトの名無しさん :2012/08/08(水) 19:34:55.82
>>739 じゃあ、処理を3つに分けることと、フラグとの関係は?
@implementation OtherClass
- (void)threadProcess:(NSImage*)image
{
[self save:image];
[self reference:image];
[self delete:image];
}
@end
これじゃ、ダメなの?
741 :
732 :2012/08/08(水) 19:40:47.99
>>740 まぁ、それが引数で値を渡すっていう形になりますよね。
その先で色々と処理をしてて、ずっとその引数を渡していくというのが
ちょっとややこしいもんで・・・。
742 :
デフォルトの名無しさん :2012/08/08(水) 19:49:47.65
>>741 別にインスタンス変数にしてもいいんだけど?
@intefface OtherClass : NSObject
@property(readwrite, strong) NSImage* image;
@end
@implementation OtherClass
- (id)initWithImage:(NSImage*)image
{
self = [super init];
if (self) {
_image = image;
}
return self;
}
- (void)threadProcess
{
[self save];
[self reference];
[self delete];
}
@end
>>741 objc_setAssociatedObject しても良いよ
744 :
732 :2012/08/08(水) 19:58:11.73
>>742 続けてレスありがとうございます。
それがグローバル変数的なあつかいになるかと・・・
すいません、なんかケチをつけてるみたいで><
どうしてもその2つ以外の方法がないかと悩んでたので・・・
745 :
732 :2012/08/08(水) 20:02:50.35
>>743 objc_setAssociatedObject!これは使えそうです!
まだ軽くしか見てないんですが、最初にひもづけておけば後でもひもづいてる内容が
わかるということでしょうか?
746 :
デフォルトの名無しさん :2012/08/08(水) 20:06:55.18
>>744 おまえの頭の中では、インスタンス変数 == グローバル変数なのかよ
「スマートなプログラム書きたいんです」とか言っているが、そもそも「スマート」の定義って何よ?
まあ、初心者が言う「スマートなプログラム書きたいんです」っていうのは、
「楽がしたい」「難しいことは考えたくない」「面倒はいや」という意思の表れなんだろうけどな
プログラムを書くことから逃げているようでは、立派なプログラマーにはなれないぞ
747 :
デフォルトの名無しさん :2012/08/08(水) 20:10:42.34
>>745 おいおい、なんでインスタンス変数がダメで、AssociatedObjectがOKなんだよ
AssociatedObjectは、既存のオブジェクトにインスタンス変数を追加する用途で使うんだぞ
>>747 そのクラスの全てにおいて必ずしも利用されない変数だからじゃね?
749 :
732 :2012/08/08(水) 20:17:08.66
>>746 グローバル変数というのは書き方が悪かったですが、ただでさえインスタンス変数が
多くなってきてるのに思いつくままに増やしたくはなかったもんで。
まぁ、それが「楽がしたい」「面倒はいや」ということですかね。。。
750 :
デフォルトの名無しさん :2012/08/08(水) 20:48:35.81
>>749 あるクラスにインスタンス変数が多くなり過ぎるのは、クラスの設計が悪い。
一つのクラスに多くの仕事をさせすぎている証拠だ。
そのクラスを役割ごとに分割して整理しろ
結局のところ、その「インスタンス変数がダメ」とかいう話も、
そのクラスに定義されているインスタンス変数の数が少なければ問題なかった、ということなんだろ?
751 :
732 :2012/08/08(水) 20:53:52.85
>>750 なるほどですねー。確かにその通りです。
どこでクラスを分ければいいかわからないまま書いていって肥大化してました
インスタンス変数を減らすとか小手先でなんとかしようとしてました
まずはクラスの設計から見直してみます。
色々アドバイスありがとうございますm(__)m
ところでLEDをフラグ代わりにするというのは何だったんでしょうか・・・
さあ……嫌がらせの釣りじゃない? > LED
753 :
732 :2012/08/08(水) 21:17:13.04
NSThread detachNewThreadSelectorでスレッドを起動するとき、起動の成功 と失敗を呼出し後すぐに判別する方法を教えてください。 detachNewThreadSelectorは戻り値がvoidなので、それ自体が成功なのか失敗 なのかが分からなくて。
NSThreadはオワコン
NSThreadはオワコン
>>755 ,756
ありがとうございます。他にスレッドを使用する方法があったなんて!
NSInvocationOperationとNSOperationQueueで実装しました。
NSInvocationOperation initWithTargetからnil以外が返ってきたら、
NSOperationQueue addOperationすればスレッドの起動が失敗することは
ないと考えてよいですか?
因みに、オワコンの意味を調べたのは内緒です。
終わりのないコンテクストの事だよ!
759 :
デフォルトの名無しさん :2012/08/09(木) 20:56:50.87
>>757 > NSOperationQueue addOperationすればスレッドの起動が失敗することは
> ないと考えてよいですか?
NSOperationQueueは、スレッドと1対1で対応している訳ではないので、それは不明。
あと、あるスレッドでエラーが発生すると、スレッドが落ちることもある。
つまり、スレッドが起動成功しても直後にエラー落ちする可能性もある。
根本的に別の手段を考えた方がいいのでは?
>>757 NSOperationQueue は同時に起動するスレッド(NSOperation)数はコア数に制限されているから、
スレッドの起動に失敗するということは全くといっていいほど考えられないのじゃないかなあ
761 :
デフォルトの名無しさん :2012/08/09(木) 22:19:02.63
>>760 ん?
スレッド数に制限があることと、スレッドの起動に失敗しないこととの間に、いったいどんな関係が?
>>761 スレッドの起動に失敗するのって逆にどういうの?リソースが足りないぐらいしか思いつかないんだけど
763 :
デフォルトの名無しさん :2012/08/09(木) 22:45:31.67
>>762 > リソースが足りないぐらいしか思いつかないんだけど
リソースってようするにメモリのことだろ?
極端な話、CPUが2コアなので2スレッド生成しようとしたが、
ある一つのスレッドで大量のメモリを消費していたため、2スレッド目の生成に失敗した。
なんてこともあるわけだ。
スレッド数とリソース消費量との因果関係は、ほとんど説明できないんじゃないか?
あと、スレッドの起動に失敗するケースといえば、例えばスレッド起動ための引数に誤りがあった場合とか。
>>763 う〜む、想定ではそうなりえるだろうけど、そんなプログラム書かないでしょ?あなたも
数スレッドも起動できないような状態でどうするの??メモリいっぱい喰うようなのが失敗したら、そりゃ失敗の対策を考えるけど、スレッドを起動すらできない状態でアプリ続けられるの?ていう。まあ繰り返すけどそんなプログラムなんて書かないけどw
>スレッド起動ための引数に誤りがあった
ええーっ。バグじゃないの?
>>763 >スレッド数とリソース消費量との因果関係は、ほとんど説明できないんじゃないか
よくわからないけど、NSThreadは無制限にリソースの許す限りスレッドを起動できるよ。そういう意味で大きな違いがNSOperationQueueとはある
リソースって単にアロケーションするメモリだけじゃなくて、OS側の管理テーブルとかね
766 :
デフォルトの名無しさん :2012/08/09(木) 23:18:27.10
>>764 別に極端にメモリを消費するプログラムを作るとか言う話をしている訳ではない。
スレッド数の制限と、スレッドの起動失敗は、無関係であることを説明しているだけだ。
765も言っているが、おそらくスレッドは無制限に生成できて、失敗はほぼないのだろう。
だから、スレッド数を制限したから起動に失敗しないとかいう話にはならない。
>>765 すまん。764も765も俺
NSThreadは無制限にリソースの許す限りスレッドを起動できるので、いつか失敗する可能性はアリアリ
NSOperationQueueはコア数に制限されるのでアプリがまともの実行可能な環境であれば、失敗することは無いだろ
ってこと
まあ、全く咬み合わないので、おしまいにしよう
コア数に制限されるっけ? シングルコアのiPhone 4で1000個とか普通に動くぜ
769 :
デフォルトの名無しさん :2012/08/09(木) 23:52:51.65
NSString* str = @"hoge"; unsigned long count = CFGetRetainCount((CFStringRef)str); NSLog("str: %ld",count); --- -> str: 2147483647 どゆことー?
770 :
デフォルトの名無しさん :2012/08/09(木) 23:58:43.03
>>767 なぜ、話が噛み合ないのかが分かった。
プロセスの起動直後は、メインスレッド1つしかない。
NSOperationQueueを使用した時点で、コア数分のスレッドが生成される。
おまえは、このときNSOperationQueueが行うスレッドの生成処理が絶対に失敗しないことを前提に、
addOperationは失敗しないと言い張っていたんだろ?
>>769 定数文字列は最初からテーブルに保存されてて、release されることはないと云うこと。
あるキーつきのオブジェクトの配列があって、別途キーの配列があるとします。 オブジェクトの配列をキー配列の順序でソートしたく、下のように書いたのですが indexOfObject:のたびに線形探索されていると思うとなんか上手くないなぁと思ってしまいます もっと上手いやり方があるでしょうか? NSArray *targetArray = @[ @{ @"object" : @"a", @"key" : @"c" }, @{ @"object" : @"b", @"key" : @"a" }, @{ @"object" : @"c", @"key" : @"b" }, @{ @"object" : @"d", @"key" : @"e" }, @{ @"object" : @"e", @"key" : @"d" }, ]; NSArray *keyArray = @[ @"a", @"b", @"c", @"d", @"e" ]; [targetArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@ => %@", [obj objectForKey:@"key"], [obj objectForKey:@"object"]); }]; NSArray *sortedArray = [targetArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSUInteger index1 = [keyArray indexOfObject:[obj1 objectForKey:@"key"]]; NSUInteger index2 = [keyArray indexOfObject:[obj2 objectForKey:@"key"]]; return [@(index1) compare:@(index2)]; }]; [sortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@ => %@", [obj objectForKey:@"key"], [obj objectForKey:@"object"]); }];
773 :
デフォルトの名無しさん :2012/08/10(金) 00:29:48.78
>>772 keyArrayを
NSDictionary* keyMap = @{@"a":@0, @"b":@1, @"c":@2, @"d":@3, @e:@4];
に変換してしまうのはどう?
>>772 線型探索が嫌なら、sortedArray の object/index を、NSDictionary の key/value にすればいいじゃん。
ありがとうございます。こうなりました。(NSArrayのカテゴリ) - (NSArray *)sortedArrayUsingKeyPresentationBlock:(id (^)(id obj))keyPresentationBlock withKeyArray:(NSArray *)keyArray { NSMutableDictionary *metaDictionary = [[NSMutableDictionary alloc] init]; NSMutableArray *resultArray = [[NSMutableArray alloc] init]; NSUInteger __block cachedMark = 0; NSUInteger count = [self count]; [keyArray enumerateObjectsUsingBlock:^(id key, NSUInteger idx, BOOL *stop) { id obj = [metaDictionary objectForKey:key]; if (obj == nil) { for (; cachedMark<count && obj==nil; cachedMark++) { id aObj = [self objectAtIndex:cachedMark]; id aKey = keyPresentationBlock(aObj); [metaDictionary setObject:aObj forKey:aKey]; if ([aKey isEqual:key]) { obj = aObj; } } } if (obj != nil) { [resultArray addObject:obj]; } }]; return [resultArray copy]; } デジタルソートなので多分速いはず・・・
>>769 Constant CFStringはコンパイル時に直接オブジェクトの構造を展開する。
これに対するretain/release等はNOP、retain countにも意味は無い。
>>771 それは10年前の話。
754です。
スレッド起動に関する議論、参考になります。
スレッドが動き出せたのかどうかを知るのって、重要だとおもうんですよ。
議論を読んでいると、NSOperationQueueですら確実に実行できているとは
限らないと読めるんですが、皆さんがスレッド使うプログラムを作るとき
は、結局どう判定してるの?動くこと前提にしちゃうんでしょうか。
>>759 >根本的に別の手段を考えた方がいいのでは?
ということで、オワコンと言われているNSThreadに戻ってきました。
NSThread initWithTargetで、nil以外が受け取れたならばスレッドは起動
出来ると判断して、NSThread startを呼ぶようにしました。
こんな感じですが、どうでしょうか。
NSThread* th = nil;
th = [[NSThread alloc]initWithTarget:self selector:@selector(threadFunc) object:nil];
if(th)
[th start];
else
return false; // エラー
NSOperationQueueが動かないって、 さすがにそこまでヘボいAPIじゃねーだろ。
>>777 考えすぎじゃね・・・?
ポストに入れた郵便物がたまたまポスト内でどこかに引っかかって配達員に回収されず届かないのを心配するようなものだと思う。
>>777 NSOperationQueueにしてもGCDにしてもthread poolに要求投げる処理方式だから
threadの生成タイミングと処理要求タイミングは直接関係無いよ。
そんなにthreadが起こせたか気になるならpthreads使って自分でthread作れば良い。
スレッドで実行する処理の最初にNSConditionをsignalするようにしといて、 起動元ではそれを時間制限付きで待機。1時間してsignalされなければ谷へ帰りなさい!
考えすぎですかね? 781の方法も参考に、やってみます。 ありがとうございました!
783 :
デフォルトの名無しさん :2012/08/10(金) 21:16:13.01
>>777 そのコードはちょっと違うだろ。
それだと、単純にinit...メソッドの引数に誤りがあった、という話になる。
チェックしたいのは本当にそこなのか?
NSThread* th = nil;
th = [[NSThread alloc]initWithTarget:self selector:@selector(threadFunc) object:nil];
[th start];
if ([th isExecuting]) {
// たぶん起動成功
}
else {
// たぶん起動失敗
}
あえてやるなら、こうじゃないのか?
で、結局のところいったい何を問題にしてるんだ?
1. スレッドは正常に処理を完了した。
2. スレッドは起動できなかった。
3. スレッドは起動できたが処理を完了できなかった。
この3つのケースで処理を分けたいのか?
それとも、
1. スレッドは正常に処理を完了した。
2. スレッドは正常に処理を完了できなかった。
この2つのケースで処理を分けたいのか?
もしも、後者ならスレッドの終了を確認しなければならない。
スレッドの起動を確認しても無意味だよ。
784 :
デフォルトの名無しさん :2012/08/10(金) 22:13:05.48
>>775 それだと、selfの中に同じキーが複数あると破綻しそうだが...
selfよりも、keyArrayの方をNSDictionaryに詰め直した方がいいんじゃないのか?
>>783 ありがとうございます。
確認したいのは、スレッドが正常に処理を開始した。です。
スレッドの処理が正常終了なのかエラー終了なのかは、インスタンス変数
的なもので確認するので気にしていません。
今回作るスレッドは、同時に1つだけで、親スレッドは中止ボタンのクリッ
クなどを受け持つようにしています。
教えていただいた、isExecutingでも判定するようにしてみます!
786 :
デフォルトの名無しさん :2012/08/13(月) 20:52:37.75
>>785 もしかして、スレッドの開始を確認したいっていうのは、
その「中止ボタン(NSButton)」のenableとdisableを切り替えたいから、とか?
>>786 そんな感じです。
実行開始できてないのに、「中止」ボタンが押せるのも変なので。
サブスレッド側で切り替えるようにすればいいだけかもしれませんが。
昨日、サブスレッドでUIをいじるためのdispatch_syncを学習しました。
「いじるための」はおかしな表現でした、スマソ。 サブスレッドから単純にUIを操作すると例外が発生するので、メインスレッド にUI処理を委譲させるようにするために、dispatch_syncを使用する方法を 学習しました、です。
Xcode 4.4.1 cocos2d 1.0.1 使ってるんですが 配列に画像を読み込ませて、それをランダムに一枚ずつ画面に表示させ、 フリックすると画像が切り替わるプログラムを作りたいんですが、どんなふうに書けばいいですかね・・・ allImage = [[CCArray alloc] initWithNSArray: [[[NSArray alloc] initWithObjects: ...,nil] autorelease]]; ImageRandomIndex = arc4random() % [allImage count]; NSString *flick = [allImage objectAtIndex:ImageRandomIndex]; flickImage = [CCSprite spriteWithFile:@"%@",flick]; こんな感じで実行してみましたが[Too many arguments to method call,expected 1, have 2]とエラーがでます・・・
> flickImage = [CCSprite spriteWithFile:@"%@",flick]; > @"%@",flick ふざけてんの?
791 :
デフォルトの名無しさん :2012/08/21(火) 08:53:10.91
なにが?
792 :
デフォルトの名無しさん :2012/08/21(火) 14:07:44.98
エラーのまんまだろ 引数が多いぞボケって言われてるんだよ
今まで、iPhoneをMACにつなぐと、XCodeの左上のプルダウンに 「〜のiPhone」というのが出てきて選択できたんだが、 それが「iOS Device」となってしまって、実機でデバッグができない。 iPhoneをiOS4からiOS5にバージョンアップしたことが原因かもしれないが、 なんか解決方法ない?
Xcodeが古いとか
795 :
デフォルトの名無しさん :2012/08/21(火) 14:56:32.58
デバイスサポートがない(Xcodeが古い、サポートプラグインがインストールされていない) あとスレチ
@"%@",flickwwwwwwwwwwwwwwwwww
797 :
デフォルトの名無しさん :2012/08/23(木) 12:26:53.18
次のメソッドを書いたら、InstrumentsでstringWithFormatの行でリークが検出されてしまいました。 なぜリークになってしまうのでしょうか?どなたかヒントいただけませんか? Xcode Version4.3.3 Instruments version 4.3 -(NSString*)urlWithUrl:(NSString*)urlString { NSArray* urlComponents = [urlString pathComponents]; NSString* resultUrlString = [NSString stringWithFormat:@"%@//%@/%@/", [urlComponents objectAtIndex:0], [urlComponents objectAtIndex:1], [urlComponents objectAtIndex:3] ]; return resultUrlString; }
798 :
デフォルトの名無しさん :2012/08/23(木) 21:07:02.77
リークなのか インデックス範囲外なら出そうな雰囲気だが
Insutrumentsが報告するのは最終的にリークになったオブジェクトだから そこで生成された後にどう触ってるかも含めて見て行かないと どこでリークしてるかなんてわからないと思う リファレンスカウントの履歴をちゃんと調べなさい
ウブンチューwww
>>801 Ubuntu Swarm
なり
GNUstep Swarm
でググれば答えらしきものはあるけど。どれだけどこまで自分でやったの?
Windows の ソース(C言語)を読みこませるとエラーが出るんですけど どうしてですか?
エラー内容見ないとわからんね
何が起動できないのか教えて?
どんなソース読み込ませたのか教えて?
そりゃあwindowsのソースなんだろう。 Microsoftの人に違いない。
Excelってソースあるのかねぇ? いいかげん拡大縮小や印刷で文字の大きさ変わるバグ治してほしいわ
WISYWIG
WYSIWYG
->でのインスタンス変数へのアクセスって出来なくなりました? selfじゃない同じクラスのインスタンスのreadonlyなプロパティにsynthesizeされている変数にアクセスするために->使おうと思ったんですが構造体でも共用体でもねーぞって怒られます
俺は4.3.2だから分からんけど、そんなわけ無いと思うが。
->はできなくなった希ガス
まじで? 強制的にアクセサ経由ってこと?
あ、でもプロパティの場合だけだよね。
と思ったら今やり直したら出来ました 型があってなくて文句言われてたかも知れません (渡されるオブジェクトは同じクラスのはずだけど型が多分スーパークラスの型だったせい) お騒がせしました
絶対にゆ
絶対にゆがいてやるこのとうきび野郎
いやとうきびは蒸すのが一番うまいだろ
焼きだろ
誰かMacアプリのgui作る時役立つサイトしらない?英語のリファレンス読むの面倒い
私の声がデムパになって 波になってあなたへ向かってく 私の歌がデムパになって 波になってあなたへ響いてく 私の愛がデムパになって 波になってあなたへ届いてく 私の電子回路が短絡する前に Electric LOVE Electric LOVE (∩ ゚д゚) アーアー この気持ちあなたに届くかな
>>823 英語のリファレンス読めなきゃ日本語のリファレンス読めば良いじゃない
公式のが出てるだろ
え?NSBttonとか日本語リファあんの?
そのレベルじゃソフト組むのは無理だろ
英語リファをググる翻訳にかけながらプロパティ、メソッド、デリゲートの効果一生懸命調べてんだが問題はわしがIB使わない派で公式のサンプルコードがIB使いまくってるから非常に困るんじゃ わしは手書きで書きたいんじゃ
翻訳つかいながらそんだけ真剣に読んでたら、だんだん翻訳使う頻度減ってくるだろ。
翻訳使っている限り、前には進めない TOEIC520しかない俺でも、若干怪しい部分がたまにあるがだいたい訳せる 翻訳に逃げず、自らの脚で歩み始めたとき、道は拓ける
だんだん翻訳するのが面倒になって、直に読むようになるだろって事。
832 :
デフォルトの名無しさん :2012/09/11(火) 01:47:00.09
むしろ、中学生レベルの文法と技術単語なだけなんだから 機械翻訳なんかかけたら単語の意味おかしいgdgdの訳が出てくるだろ。 素で読んだ方が速いって。
馬鹿はアルファベットすら満足に読み書き出来んの
小学生ですら英語できる時代だぞ
英語勉強するか、、しかしめんどくさい、、、、
大学入試やってればどんなF欄だろうがリファレンス読むのに困ることは無いだろう 中高生はアプリなんか作ってる暇があったら勉強しなさい
大学進学率は日本は異様に高くて なんと30%も!と聞いたが。
原文表示の機械翻訳で困ったこと無い
>>828 そんな所にこだわるから組めないんだよw
840 :
デフォルトの名無しさん :2012/09/11(火) 20:28:11.04
>>828 IBを使わないことに、何かメリットがあるの?
IB使って色々作って理解を深めた方が、 IB使わないで書けるようになるのも速いような気がする。 それが素晴らしいかどうかは知らんけど。
843 :
デフォルトの名無しさん :2012/09/11(火) 21:05:48.78
>>841 それは、つまり、IBは敷居が高い。ということなのか
俺は未だにテーブルビューをIB使って書けないから全部コーディングっていう
845 :
デフォルトの名無しさん :2012/09/11(火) 21:37:04.84
最近気づいたのだが、IBで配置したNSScrollViewとコードで生成したNSScrollViewの動作が微妙に違う。 旧で配置したNSScrollViewは、スクロールバーを”なし”に設定しても、マジックマウスのジェスチャーでスクロールできるのだが、 [[NSScrollView alloc] initWithFrame:...]した方は、スクロールバーを”なし”にすると、マジックマウスのジェスチャーでもスクロールできない。
phpしか書けないバカだけど iPhoneアプリ作りたい。 Macはある。 マウンテンライオンにエックスコードは挿れた オススメのサイトや本を教えてください。
荻原
ひれがすの原著をkindleでタダ見
PHPとかできるんだったら、いっそのことネイティブアプリじゃなくてWebアプリでもいい気がするけどね。
クラス間で変数受け渡しする方法教えてください ぐぐってもわからん
一方からもう一方に直接渡す。 双方から見える場所を経由する。
一方は2chに書き込む もう一方は2chを読み込む
インスタンス変数の受け渡しでぐぐれば沢山あるぞ。
この質問、最近見なくなったなと思ったらw その場合クラスじゃなくてインスタンスな。
× クラス間で変数受け渡しする方法教えてください ○ インスタンス間でインスタンス変数の値を受け渡しする方法教えて下さい><
>>854 オブジェクトでもメモリでもファイルでもインターネットの向こう側でも、都合の良い場所を
ていうか直接渡せばいいでしょ
なんとなくわかりました ありがとうございます
初歩の初歩だぞ、それくらい自力でなんとか出来なきゃ先生きのこだ
俺高卒のヒキニートだけど英語のドキュメントで困ってないぞ
@autoreleasepoolについて質問なのですが(ARCありで)、 上のコードはstringのメモリがループするごとに確保→開放されて 下のコードだと100個分のstringがfuncを抜けるタイミングで開放 されるという理解でいいんでしょうか? - (void)func { for(int i = 0; i < 100; i++) { @autoreleasepool { NSMutableString *string = [NSMutableString string]; [string appendString:@"test"]; } } } - (void)func { for(int i = 0; i < 100; i++) { NSMutableString *string = [NSMutableString string]; [string appendString:@"test"]; } }
だいたいそうだけど、正確にはfuncを抜けるタイミングではない。 あと上はすごく無駄だと思う。
つiBooks 意外とドキュメントが充実していたりする
864 :
デフォルトの名無しさん :2012/09/13(木) 20:34:56.20
>>861 下のコードには、@autoreleasepoolがどこにも書いてないので、どのタイミングで解放されるかは分からない。
alpha=0.0;とhidden=YESって動きにどれくらい差があるもんなんでしょうか?
funcがどういう環境の中で動いてるのか書いてないんだから、わからないだろ。
for分の中で宣言したんだから、iがインクリメントされる度にいらなくなるよね。
要らなくなる=解放される ではない。少なくともObjective-Cの世界では。
簡易コンストラクタか。ということはデフォルトのautoreleasePoolにスタックされるのかな。 アプリ終了まで非使用領域に残り続けるってことで合ってる?
>>867 ,870
「最も内側のautorelease poolがdrainされるタイミングで解放される」
「autorelease poolが全く存在しない場合はリークする」
ちなみにcallerとcalleeがARCでbuildされている場合には
forのスコープを抜ける毎に解放されるが、
これはコンパイラおよびランタイムによる最適化であって言語仕様ではないので、
必ずしもそうであるという保証はない。
英語リファ読むの思ったより楽だけど所々解釈出来ないとこがあるべよ それが自分のプログラミングレベルの問題なのか英語をちゃんと読めてないのかわからないのが困る
きっと両方
単純な英語も読めないという人は文章把握能力や推理能力の不足に 依る場合も多いから、実は日本語もうまく読み取れていない。
試しにNSButtonはどおですかねん??全部理解可能??
わからないとこをここで訊いてみればいいじゃん。
NSButtonはalternateTitleとattributedTitle。。 と言っても後者はNSAttributdString調べてないからどっちにしろ理解出来んかもしれんけど
問題出した途端、急にレスが途絶えたな
問題とは?
「NSButtonはalternateTitleとattributedTitle??」
>>881 872から読んでくれ。てかお前らちゃんと駐在してるのな。。
NSButtonの挙動なんてInterface Builderでシミュレートするだけで解るだろ。 インスペクタでalternateTitleやらボタンタイプやら変えて動かしてみ。 ドキュメント以前の問題。
>>883 ですな。。IB弄ってさっきalterateTitleは解決です(attributedTitleはまだ)。IBがGUIの教材になるのは今回いい勉強になったどす。
しかし本題の英語はさっぱりだのう。。。インスタンスの内容が大まかに分かった後でもその英文の説明文の意味はさっぱり。。。。。
ちなみにこれ↓
Sets the title that appears on the button when it’s in its alternate state.
ボタンがalternateステートの時表示するタイトルをセットする。
label.text = @"%d",変数; でエラーがでます。 対処法わかりますか?
ワロタ
>label.text = @"%d",変数; label.text = 変数; こうしてるのとほぼ同じ。
気持ちはわかるw
C言語やらずにC++やobj-Cやるやつが多いよな
多いはずはないんだが、この惨状を見ると、少なからずいるようだな。
実際のところ、基本的な文法とポインタと構造体さえちゃんと理解していれば、C言語を隅々まで理解してなくても十分じゃないだろうか? 共用体とかあるらしいが使ったことない。
ていうか、いきなりC++なりobjcなりやってもC身に付くよね普通。
普通普通
>>893 多いじゃろう。iPhoneアプリを作ろうとしたプログラミング初心者はいっぱい
わしです
大学で囓ったCがK&Rと90あたりの過渡期だったので ポインタを宣言するという概念がなくて hoge(hage*) <-この後ろアスタリスクなんだろう?Obj-C特有の記法かな? と思ってました…
>>895 だな
C++からだったけど構文上のごく一部の非互換を調べた程度で
後は別にCのソースいじるのに支障なかった
Obj-Cに至ってはCと完全互換だしな
前にNSButtonと翻訳で騒いでたもんだが相変わらずリファの翻訳意味わかんねーよ。。。NSWindowメソッド大杉だろう
cやってないとstringWithFormatですら戸惑うのではないだろうか
まあ printf の書式が前提だからなあ。
903 :
デフォルトの名無しさん :2012/09/19(水) 21:02:59.00
日に日に自作コードスニペットと関数マクロ 複数行マクロ、カテゴリ拡張が増えて行って 他の環境で組める気がしない・・・
>>903 それもいずれdeprecatedになってくんだよな
TWRequestで送ったTweetのsourceが<a href="
http://apple.com ">iOS</a>になるのどうにかならないの?
クライアントの名前がiOSとかキモイんだが
iOS スレで書いてくれ。
iOSの機能でブラウザなりアプリが無いのだからいいんじゃないの
そんな細かいことをキモイと言う程デキやつなら、NSURLConnection/NSURLRequestで自分でTwitter API実装すればいいじゃん。そうであれば
>>906 も聞いてくれるかもねw
まあ、些細なことに拘るけどデキもしないやつなんだろうけど
908 :
デフォルトの名無しさん :2012/09/30(日) 10:03:33.99
脱獄アプリを作りたいんだけど、windows上だと開発は無理かな? スレチだったらすまん
スレチ
910 :
デフォルトの名無しさん :2012/10/01(月) 03:03:44.55
本屋行ったらObjective-Cのヒレガス本が出てたけど 正直萩原本のほうがいいな。タイミングのせいかARC対応してないし iOSのほうの原著版は書き直したらしいけど 萩原本とUIKit詳解(を最新に書き直し)は 英訳したら海外でも売れそうな気がする
912 :
デフォルトの名無しさん :2012/10/01(月) 15:26:48.87
漫画カメラのフレーム選択画面みたく、 画像を一覧表示、選択、背景に設定ってどうすればできるんでしょう;ー; 初心者ですが簡単な手順だけでも教えていただきたいです
パクリアプリでも作るつもりですか
スクロールビューにイメージビュー並べるとか
http://libro.tuyano.com/index3?id=550001&page=4 「クラスを更に考える」(4/8)について、まるで
わかりません・・・。
@implementation SuperMyTestClass
+(MyTestClass*)superMyTestClassWithMessage:(NSString*) str
andMessage2:(NSString*) str2 {
id obj = [super myTestClassWithMessage:str];
[obj setMessage2:str2];
return obj;
}
-(void)setMessage2:(NSString*) str
{ message2 = str;
}
・・・・
このコンビニエンスコンストラクタですが、
スーパークラスとしてのコンストラクタなので、
戻り値は MyTestClass 型ではなくSuperMyTestClass型の
ではないのでしょうか?
コンストラクタ内記載のobjは、MyTestClass型なのに、
なぜ、スーパクラス側の[obj setMessage2:str2];が
動作するのでしょうか・・・?
初心者の質問でしたらすみませんが、
どなたか教えてください。
>>915 書いてある返り値の型なんか関係なく、クラスAとしてalloc+initされたら、クラスBとして返されようがクラスAのオブジェクト。
Aのメソッドにはrespondするが、Bのメソッドにはrespondしないので、クラスBはクラスAのスーパークラスでなければならない。
ちなみに、返り値として返すとき、特にサブクラスでオーバーライドされる可能性のあるメソッドは、クラス名ではなくてid型を指定するのが定石。
いまどきはidじゃなくてinstancetype ですよ
ありがとうございます。 そう思って見ても、4行目 obj = [super myTestClassWithMessage:str]と、 スーパークラスのオブジェクトで作ったのに、 5行目の[obj setMessage2:str2]で、スーパクラスでない 自分のクラス側のメソッドにはrespondするのかが まったくわからんのです・・・
仕様です
[self ...]と[super ...]は基本的にはメソッド実装の検索の起点が違うだけで、 メッセージが送られる先のオブジェクト(今の場合はSuperMyTestClassクラスオブジェクト)は同じだから。 「スーパークラスのオブジェクトで作った」のではなく、スーパークラスの「メソッド実装」を自分のクラスに対して呼び出した。
>>918 MyTestClass の myTestClassWithMessage で [self alloc] しているから。そこが [MyTestClass alloc] だったら、言う通り スーパークラス= MyTestClass のインスタンスにしかならないが、[self alloc] なので self=呼ばれたクラス のインスタンスになる。
@interface MyClass : NSObject
+ (void)printSelfClass;
@end
@implementatio MyClass
+ (void)printSelfClass { NSLog( @"%@", NSStringFromClass( self ) ); }
@end
@interface MySubClass : MyClass
@end
@implementatio MySubClass
+ (void)printSelfClass { [super printSelfClass] }
@end
[MyClass printSelfClass];
[MySubClass printSelfClass];
とすると、self を NSLog しているのは、MyClass でだけど、ちゃんとクラスが違うでしょ
>>921 @implementatio MySubClass
+ (void)printSelfClass { [super printSelfClass] }
@end
の、
+ (void)printSelfClass { [super printSelfClass] }
が無くて直接 MyClass のを [MySubClass printSelfClass] としても同じ。たぶん
>>917 こいうのがあるから、いまどきも id なんだと思うけど
MySubClass のインスタンスを MyClass の変数に格納するのはいたって普通だが、MyClass のインスタンスを MySubClass の変数に格納するのはなんだか気持ち悪いじゃんということで
まあ、どっちにしろ実質的な気持ち悪さはあんまり変わらないんだけど
924 :
デフォルトの名無しさん :2012/10/03(水) 19:35:21.89
なんというか、本当はMyTestClassのサブクラスなのに、SuperMyTestClassという名前が付いてるあたりがキモいな。
超同意。
926 :
デフォルトの名無しさん :2012/10/03(水) 22:24:40.29
画像を表示し、フレームを超える画像サイズの場合は縮小ではなく、 スクロールバーをだす機能を作りたいと考えています。 IBにてNSScrollViewを配置し、IdentityタブでScrollView内のNSViewのクラスをNSImageViewに変更し、 Outletとして登録、setImageで画像を設定するのですが何も表示されません。 Imageメソッドで取得しても(null)になっているので設定ができていないようです。 NSScrollViewではなく直接NSImageViewを配置した場合は表示できているのですが。 どう設定すれば機能を実現できるでしょうか?
>>926 NSImageViewを配置した後に、メニューから「Embed in」を選ぶ。
915、918です。
>>916 >>920 ありがとうございます。ようやく意味がわかりました。「スーパークラスのオブジェクトで作った」のではなく、スーパークラスの「メソッド実装」を自分のクラスに対して呼び出したということですね。
>>921 ありがとうございます。それで、printSelfClassでやってみると確かにそのとおり。検証できました。
>>924 本当はMyTestClassのサブクラスなのに、SuperMyTestClassという名前が付いてるので自分もまったく混乱しました。
結局自分としてあるべきコードは、以下だと思うのですが、★の行にてエラーが出てしまい、(MyTestSubClass* )のキャストが要るようなのですが、スーパークラスの「メソッド実装」を自分のクラスに対して呼び出したという観点からすると、いまいち理由がわかりません・・・。
"Incompatible pointer types initializzing 'MyTestSubClass' with an expression of type 'MyTestClass'"
--8<-----8<-----8<-----8<-----8<-----8<---
@implementation MyTestSubClass
+(MyTestSubClass*)myTestSubClassWithMessage:(NSString*) str
andMessage2:(NSString*) str2 {
MyTestSubClass* obj = [super myTestClassWithMessage:str]; //★
[obj setMessage2:str2];
return obj;
}
-(NSString*)message2 {
return message2;
}
・・・・
--8<-----8<-----8<-----8<-----8<-----8<---
その切り取り線が無性に気になる
>>928 これならエラー出ないんじゃね?
id obj = [super myTestClassWithMessage:str];
[(MyTestSubClass* )obj setMessage2:str2];
>>928 サブクラスの型 の変数を 親クラスの型 の変数に入れるのは、サブクラスは親クラスを全て内包しているので問題無い
親クラスの型 の変数を サブクラスの型 の変数に入れるのは、親クラスはサブクラスで追加されたものが入っていないのでいいのかわるいのかはわからない
コンパイラは間違っているんじゃネーのってことでエラーにする。コンパイラがわかるのは変数の型であって、その内容(インスタンス)がサブクラスなのかなんなのかわからないので
キャストするのはプログラマの責任で、id とするのは「なんだかわからないよ」という意味もある。どういうサブクラスが追加されるかわからないから
915質問者です。
>>920 >>921 によるとコンパイラ君は、[super ・・・]によるコンビニエンスコンストラスタは
きちんとスーパクラスではなく自分のクラスの呼び出しとわかっているはずだな、とおもうので
やっぱりエラー(実際はワーニング)はげせないですね。
>>928 もともとの記事にある方法と同じで、これだと (MyTestSubClass* ) キャストすら
要らないで動きます。
@interface MyTestClass に +(MyTestClass*)myTestClassWithMessage:(NSString*)str; とある以上、コンパイラにはMyTestClassクラスのオブジェクトを返す(つもりである)ことしかわからない。
そうだよね。コンパイラはヘッダーを見るだけで、親クラスの実装部(.m)は参照しない
親クラスの実装部は何を返すかわからないというのは上で説明されている通り
「[super ・・・]によるコンビニエンスコンストラスタはきちんとスーパクラスではなく自分のクラスの呼び出しとわかっている」から自分のクラスのインスタンスを返すハズというのは言語仕様外の決まり事でしかなく、
>>933 の言う通りにしかならない
TextField上でEnterキーを押したときに処理を開始したい場合、IBActionを設定すればできるんですが、 これだとTabキーにも反応してしまいます。 Enterキーのみで処理させるにはどうすればいいでしょうか?
>>935 そのTexitField内でのEnterだけで何かしたいなら、サブクラスの
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent
938 :
935 :2012/10/04(木) 22:44:37.02
939 :
デフォルトの名無しさん :2012/10/05(金) 00:08:32.38
>>935 IBのNSTextFieldの属性で、Actionを「Send On Enter Only」に設定するのはどうだ?
940 :
デフォルトの名無しさん :2012/10/05(金) 04:15:22.97
オブシーって呼んでいいんですか?
941 :
935 :2012/10/05(金) 22:45:18.10
>>938 気づかなかった・・・それもシンプルでいいですね!
もう一つ質問させてください。
NSStepperを使いたいと考えているのですがステッパーにて値を変更したことを検知して
処理を走らせたいと思うのですが、どうすれば検知できるでしょうか?
IBAction で繋げば反応するだろ。というかスレチ
質問
UILabelを動的にリサイズする方法が分かりません。
storyboard画面で、UITableViewのPrototype Cells(UITableViewCell)にLabelを貼っつけてます。
Prototype Cellsのheightは44、Labelのheightは43に設定してます。
Labelにセットする文字列がはみ出る場合があるので、文字列の長さによってheightを可変にします。
ttp://blog.syuhari.jp/archives/2097 ttp://akabeko.me/blog/category/programing/ios/page/2/ を参考にして
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
のメソッド内でCellのheightは変えられるのは分かったんですが、Labelのheightはどこで変更すれば良いのかが分かりません。
ヘッダファイルに
IBOutlet UILabel *label;
としておいて、上記のメソッド内で
label.frame.size.height = ○○;
などとやってみたんですが、画面に表示するとデフォルトの43に戻ってしまいます。
何処が間違ってるでしょうか?よろしくお願いします。
944 :
デフォルトの名無しさん :2012/10/18(木) 01:02:55.67
>>943 ViewDidLoadでやりなさい
というかframeごと設定してやらないといけないから
CGRect frame = label.frame;
frame.size.height = xxx;
label.frame = frame;
とかやらないとダメだと思うが
945 :
デフォルトの名無しさん :2012/10/18(木) 01:06:15.56
>>944 あ、テーブル内か。ViewDidLoadは無視してくれ
cellForRowAtIndexPathかな
>>944-945 おおお、cellForRowAtIndexPath内で
>>944 をやってみたら上手く行きました!
やっと先に進める…
ありがとうございました。
イマドキはAuto Layoutでやるんじゃないの
948 :
デフォルトの名無しさん :2012/10/19(金) 14:40:33.90
今度のiOSはTextFieldに日本語を入力するとエラーになるようになったね
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSString *str = [[NSString alloc] initWithData:data encoding:NSShiftJISStringEncoding]; ↑で、dataの中に変な機種依存文字が1文字でも入ってると、 2行目のinitWithData:encoding:でエンコーディングに失敗してstrが空っぽで帰ってきてしまいますよね ?←こういうの エンコード出来ない文字だけを事前に除外して、それからエンコードする方法って何かありませんかね
>>949 2chブラウザ作る気?
まぁ、簡単なのは、改行コードのバイト列で事前に区切ってしまえば、空っぽになる範囲を最大で1行分(1レス分)に抑えることができる
もしくは自力で、機種依存文字とか無視して強制変換するコードを書くしかあるまい
>>949 iconv使え
あと、たぶんShiftJISじゃなくてCP932じゃね?
952 :
デフォルトの名無しさん :2012/10/20(土) 12:35:37.67
NSString の文字コード変換も、iconvを使ってると聞いたことがあるが
iconvのAPIを直接叩けってことだよ
あぁMac OS Xならiconvでいけるか? iOSだとiconv無理だったと思う
もうおまえ黙ってろよ
949です
>>950 そのとおりです
勉強がてらtwitterか2chのビューワーを作ってみようかとw
>>951 ありがとうございます、iconvで正常にNSDataからNSStringに変換出来ました
>>954 libiconv.2.4.0.dylibを参照して-liconv.2を追加したらiPhone実機で動きましたよ
質問というか相談なんですけどナビゲーションでどんどんビュー階層を進んで行くにつれてデータ追加してく場合ってパブリックとプロパティどっちがコードがキレイですかね?
は? 今時publicなんか使う? 今はpropertyでauto synthesize。 self使えない/使いたくないところは_前置で。
辞書をプロパティリレーで回すか単品データを一つずつプロパティリレーで回すかどっかでパブリック使うか悩むんですねん、てかパブリックて使ったことないですねん
ARCでretain、releaseなどを自動挿入したソースコードを見る方法ってあるんですか?
無い
>>961 ありがとう。
ARCを信じることにします。
>>962 Xcodeのナビゲータでアセンブルコードは見れるよ
964 :
デフォルトの名無しさん :2012/10/23(火) 18:37:01.34
>>957 いったい何を問題にしているのかよく分からん。
適当なコードを提示して説明してくれ。
http://vimeo.com/39105449#t=9 この動画の9秒目の、横にシュッとやると下からメニューが出てくるヤツを真似したいんだけど上手く行かない
新しいようつべアプリでも同じ様なのあるけど、これってどうやってるんですかね?
1.一番下にメニュー画面(テーブルビュー)を置いておく
2.幅2画面弱(520px)の透明のスクロールビューを用意する
[scrollView setContentSize:CGSizeMake(520, self.bounds.size.height)];
[scrollView setBackgroundColor:[UIColor clearColor]];
3.スクロールビューのCGPoint(200,0)をデフォルト位置にする
[scrollView setContentOffset:CGPointMake(200, 0)];
4.スクロールビューのPagingEnabledをYESにする
5.4のデフォルト位置にメイン画面(UIViewとか)をAddする
UIView* mainView = [[UIView alloc] initWithFrame:self.bounds];
[mainView setCenter:CGPointMake(self.center.x + 200, self.center.y)];
[scrollView addSubview:mainView];
6.2〜5で作ったスクロールビューを1のメニュー画面の上に重ねる
7.スクロールビューを右にむかってシュッとやると200px分移動して、下からメニュー画面が出てくる
8.んだけど、スクロールビューの透明な部分が邪魔で下のメニュー画面が押せない…
Cocoa Controlsとかでそういうのライブラリでいっぱいあるから探してパクれ
>>964 何も問題はないですねん。キレイなコード書きたかったのの相談でしたですねん
複数ターゲットのプロジェクトで、片方のターゲットに含まれないソースをインポートすると リンクエラーになってしまいます。 ターゲットによって#import文を分岐させることはできるのでしょうか?
ターゲットでマクロ定義分けてifdefでもすれば出来る
972 :
デフォルトの名無しさん :2012/10/27(土) 11:36:04.36
>>970 一つのソースファイルを複数のターゲットで共有したいなら、そのソースファイルを複数のターゲットに含めるだけだよ
>>969 俺はそういう場合、シングルトンのクラスを用意してデータの管理している。
引数やらプロパティで引き継ぐとまじースパゲッティになる。
シングルトン?グローバル変数? それはなんか違うような・・ 綺麗なコントローラー間の値の受け渡しなどグループ引数的なものはダラダラと記述しないで id 1つ。 coredata使う時のsegueのdetailItem的な感覚が参考になるかな。 idの正体はNSArray*、生成は@[]で、
各階層でデータを追加等したい場合、それらのデータを管理するオブジェクトの参照が必要になって、それを遷移時に nextViewController.delegate = self.delegate; みたいにいちいちリレーするとスパゲッティになるから、 データ管理用のシングルトン型モデルコントローラを作った方が遷移時にdelegateを引き継がなくて良くてすっきりするよねって話じゃないの?
それならAppDelegateってやつがすでにいるジャマイカ
977 :
デフォルトの名無しさん :2012/10/30(火) 05:41:32.47
アプリが用意するシングルトンクラスなんて、相当な大規模開発時のグローバル変数の受け皿以外の用途が見つからない サンプルアプリでも使ってるの見たことない つまりシングルトンなんかでグローバル変数はダメダメ設計って事さ
Objective-CなんだからちゃんとOPPしてくれよ
OPP? OOP?
NSUserDefaultsなんかもシングルトンじゃん アプリケーション内のあちこちで共有されるモデルを、モデルコントローラで統一管理して何がいけないのか OOPからも逸脱してないと思うけど
981 :
デフォルトの名無しさん :2012/10/30(火) 20:25:08.99
システムが用意するシングルトンクラスの話なんか誰がしてるんだよ! アプリでシングルトンクラスが必要なのは、天下の裏金マンセーIBMが受注する、6000万円クラスのWEBシステムぐらいだ!それを人はアプリと呼ばないがなwwww そしてIBMはスルガ銀行の時みたいに失敗して損害賠償裁判に負けるのさwwww
982 :
デフォルトの名無しさん :
2012/10/30(火) 21:31:37.96