問題タブ [objective-c-blocks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1578 参照

objective-c - msg_send 呼び出しで発生するオーバーヘッドはどれくらいですか?

ユーザーがまとめたタスクのリストをまとめて実行しようとしています。これらのタスク リストは、数百または数千のアイテムになる可能性があります。

私の知る限り、最も簡単で明白な方法は、配列を作成してから反復処理することです。

デスクトップの場合は問題ないかもしれませんが、iPhone や iPad の場合は問題になる可能性があります。これは良い方法ですか、それとも同じことをより速く達成する方法はありますか?

msg_send がどのくらいのオーバーヘッドが発生するかについて質問している理由は、単純な C 実装も同様に実行できるからです。たとえば、リンクされたリストをまとめて、ブロックを使用して次のタスクを処理できます。それから何か得るものはありますか?

0 投票する
2 に答える
804 参照

objective-c - 括弧で囲まれた、変数ではなく型の間のキャレット文字

Apple のドキュメントを調べていたところ、このようなものを見ました(void (^)(void))。誰かがこの声明の意味を説明できますか? ^XORですよね?void XOR void私にはあまり意味がありませんか?

みたいなのもありました(void (^)(BOOL finished))

0 投票する
3 に答える
4367 参照

objective-c - dispatch_apply() から「抜け出す」方法は?

ブロックbreak内のステートメントをシミュレートする方法はありますか?dispatch_apply()

たとえば、ブロックの列挙を扱っているすべての Cocoa API には、「停止」パラメーターがあります。

GCDに似たものはありますか?

0 投票する
1 に答える
846 参照

iphone - 他のオブジェクトに返されるブロックでの ivar の使用

ビルドの種類によってターゲット iOS 4 が変わる iPhone アプリケーションでクラッシュが発生することがわかりました。

デバッガーは私に先に進むことを何も与えていません。

EXC_BAD_ACCESS で。selfNSObject を継承するクラスです (以下では NSObjectInheritor として示されています)。ゾンビが有効です。メソッドを 3 つの方法で変更してみましfactoryたが、次の結果が得られました。

これは、デバッグ ビルドとアドホック ビルドの両方でクラッシュします...

これはデバッグビルドでは機能しますが、アドホックでクラッシュします...

これはデバッグとアドホックの両方で機能しますが、非常に見苦しく冗長です。

私の理論ではboolValue、返されたブロックが実行された時点でアクセスできなくなります。それは

YESまたはNOもちろんSubclassOfNSObjectInheritorのinitで割り当てられます)および

SubclassOfNSObjectInheritor の実装で。

最後の質問は、何が間違っているかについての私の理論は正しいですか? それを行う 3 番目の方法 (アドホック ビルドおよびデバッグ ビルドで動作することが示されています) は安全ですか? これを行う最善の方法は何ですか?

0 投票する
1 に答える
2502 参照

iphone - ブロック IPhone SDK 内での自己参照

クラスの初期化にブロックを渡すコールバックメカニズムを実装しようとしています。いくつかの作業の後、そのクラスが私を呼び出します。ブロックが呼び出され、ブロック内の「self」で何かを呼び出す場合を除いて、ほとんどすべてが機能します。ブロック内で自分自身への参照をコメントアウトしない限り、Program received signal: “EXC_BAD_ACCESS” が表示されます。

ブロック内で自分自身にアクセスできると考えるのは間違っていますか? アドバイスをいただければ幸いです。このコードは、新しい「ユニバーサル アプリ」に含まれており、現在、iPad の部分に取り組んでいるため、iPad シミュレーターで実行しています。

いくつかのコード:

そして、ここに LoginAlertView からのいくつかのコードがあります

およびコールバック呼び出し

次のコード行に変更しました

次のエラーが表示されます

もう1つ、私のブロックの定義は次のようになります

そしてメンバー変数はこれです

また、ブロックの宣言を変数に移動して、それを渡そうとしました。これは同じ結果になりました。ブロックで「コピー」を使用するたびに、恐ろしいプログラム受信信号「EXC_BAD_ACCESS」が表示されます。これはおそらく IOS3.2 のものだと思ったので、iPhone 4.0 シミュレーターで実行してみましたが、同じ結果でした。ブロックをヒープに「コピー」するために必要なコンパイラ設定はありますか? 私はLLVM1.5を使用しています

0 投票する
2 に答える
20287 参照

objective-c - Objective-C のインスタンス変数としてのブロック参照

Objective-C で無名関数 (ブロック) への参照をインスタンス変数として格納できるかどうか疑問に思っていました。

委任、ターゲット アクションなどの使用方法を知っています。これについては話していません。

0 投票する
2 に答える
454 参照

iphone - UIView.h の '^' トークンの前の構文エラー - コンパイラの設定を変更しても修正されません

最新の公式の iphone SDK をインストールしましたが、私の個人的なプロジェクトは、この質問で説明されているように、UIView.h で同じコンパイラ エラーを取得しています: Syntax error before '^' token

「^」トークンの前の構文エラー

解決策は、GCC 4.2 または LLVM を使用するようにコンパイラの設定を変更することです。Xcode で利用可能なすべてのコンパイラ設定を使用してみましたが、まだエラーが発生しています。

プロジェクトで (^) ブロック構文をサポートするために他にすべきことはありますか。プロジェクトは、以前の公式 SDK リリース (OS4 より前) で正常に構築されていました。

別の奇妙な詳細、リリースではなく、デバッグ構成でのみエラーが発生します。デバッグとリリースのビルド設定を比較してみましたが、大きな違いは見られませんでした。違いがあったところで、リリース構成値を使用するようにデバッグ構成を設定しようとしましたが、それでもそれらのエラーが発生しました。

助けてくれてありがとう

0 投票する
3 に答える
10024 参照

iphone - NSArray からブロックを実行していますか?

ブロックを2つ作成してNSArrayに追加すると、ブロックをオブジェクトのように扱うことができるので、配列から実行する方法はありますか?

編集:明確にするために更新@davedelongの優れた回答ごと

0 投票する
1 に答える
2304 参照

objective-c - Objective-Cブロックをシリアル化/非シリアル化する方法はありますか?

「プロモーション」のサポートが必要なアプリを作成しています。これらのプロモーションは任意に複雑になる可能性があり、さまざまなデータが計算に関連する可能性があります。したがって、開発の初期段階では、これらの仕様スキーマ全体を発明したくはありません。Objective-Cでそれぞれを記述し、コンパイルされたコードを(CoreData)データベースにシリアル化するだけです。後で呼び出して実行するため。

これはどうにか可能ですか?GCDブロックは、これに適した候補になるのではないかと考えていましたが、それらをシリアル化/逆シリアル化するためのすぐに使用できる方法はわかりません。

アドバイスありがとうございます。

編集:これはiPhoneアプリなので、残念ながらPython関数のピクルスのようなものを使用することはできません...それはまっすぐなObjective-Cでなければなりません...

0 投票する
5 に答える
6660 参照

iphone - iOS 4 GCD に関する質問

WWDC 2010 のプレゼンテーションをいくつか見ました。また、ブロックと同時実行性に関するドキュメントのほとんどを読みました。また、Grand Central Dispatch でのシリアル キューでのブロックの使用に関していくつか質問があります。スクロールビューと画像情報の辞書 (画像への URL など) を持つ iOS 4 プロジェクトがあります。GCD とブロックを使用して画像をダウンロードし、スクロールビューに配置して、メイン スレッドをブロックしないようにしたいと考えています。動作するように見える次のコードを書きました。

2 つの質問があります。

  1. 同時実行ガイドによると、非スカラー型である囲みスコープから変数をキャプチャするべきではありません - 私のコードでは、NSDictionary* オブジェクトである dict をキャプチャします。キャプチャが許可されていない場合、どのようにコードを記述すればよいですか? ブロックは、実際に使用されている外側のスコープから変数のみをキャプチャしますか?

  2. すべての画像がシリアル ディスパッチ キューを介してフェッチされる前に、現在の ViewController を離れるとどうなりますか? それらを作成したViewControllerがなくなったことを彼らが認識しているとは思わないので、メインスレッドのスクロールビューに画像ビューを挿入する完了ハンドラーを実行するとどうなりますか? それはエラーを引き起こしますか、それとも何ですか?また、ViewController が消えたときに、シリアル キューの残りの操作をキャンセルするにはどうすればよいですか?

よろしくお願いします、