問題タブ [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.
objective-c - Objective-Cブロックは自動リリースされますか?
このようなブロックを宣言し^{ DoSomething; }
てインスタンス変数に入れる場合、Block_copy()
それを維持するのであれば、そうする必要がありますか?
objective-c - Objective-C ブロック - オブジェクトとして使用
以下のコードを参照すると、ブロックが配列に配置されたら、そのブロック オブジェクトを取得して、ブロック内の実際のコードを実行するにはどうすればよいでしょうか。
別の質問: 以下のようなブロックでメソッドを呼び出す場合、そのブロックはそのメソッドのコードをカプセル化しますか、それともメソッドのシグネチャを取得してそのように呼び出しますか?
objective-c - iPhone:dispatch_afterを使用してNSTimerを模倣する
ブロックについてはよくわかりません。NSTimer
との繰り返しをどのように模倣しdispatch_after()
ますか?私の問題は、アプリがバックグラウンドに移動したときにタイマーを「一時停止」したいのですが、サブクラス化NSTimer
が機能していないようです。
うまくいくように見えるものを試してみました。そのパフォーマンスへの影響や、大幅に最適化できるかどうかは判断できません。どんな入力でも大歓迎です。
iphone - ObjectiveCのブロック宣言が競合する
私はObjectiveCブロックに関していくつかの本当に厄介な問題に遭遇しました。たとえば、次のようなコードがあります。
このコードでは、「互換性のないブロックポインタ型が'void(^)(enum Class2Enum)'を初期化しています。'Class1Callback'が必要です」というエラーが表示されます。
しかし、main.cでインポートを逆にすると、つまり
エラーはその場所と説明を変更します-今それは一列に並んでいます
説明は「'void(^)(BOOL)'を初期化する互換性のないブロックポインタ型、期待される'Class2Callback'」です。
メソッドの宣言でブロックタイプがClass1Callbackであると示されているのに、コンパイラが「Class2Callback」を予期するのはなぜですか?なぜそれが起こっているのか、どこを探すべきか、そして答えを見つけるために何を読むべきか、私にはわかりません。助言がありますか?
objective-c - Objective-Cで「ブロック」オブジェクトのカテゴリを作成することは可能ですか?
Objective-C Blocks のカテゴリを作成して機能を追加したいと考えています。
[aBlock copy]
通常の , [aBlock retain]
, [aBlock release]
,を許可する代わりに[aBlock autorelease]
。私は次のようなことができます:
可能なカテゴリ
objective-c - Objective-cブロックをネストするときの構文/フォーマット
私はブロックを入れ子にしています、そしてそれは醜いように見えます。これをそれほど醜くなく書く方法はありますか?構造的ではなく、主に構文の提案を探していますが、どちらも受け入れます。
私のブロックファクトリメソッド、
これは、これに類似した多くの関数から呼び出されます。
queueはNSOperationQueueオブジェクトです。すべての(醜い醜い)キャストなしではコンパイルされません。アミドイニトライト?
編集:Dave DeLongの回答、およびhttp://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/に従って、行を変更しました
することが、
iphone - ループ x 列挙
最適化して高速化するために、私のアプリの一部を書き直しています。
このアプリはブロックの前に作成されたので、ブロックを使用するように多くのことを書き直しています。
ループを列挙に置き換えています。列挙型でループを変換する価値があるかどうか、何か知っていますか? 私はこれを意味します:
これとともに:
ありがとう
iphone - setKeepAliveTimeout と BackgroundTasks
私はその話題に大きな頭を悩ませています。新しいデータをチェックするために、Web サーバーを定期的にポーリングする必要があるアプリケーションに取り組んでいます。返された情報に基づいて、ローカル通知をユーザーにプッシュしたいと考えています。
このアプローチは、APNS に基づいてリモート サーバーが機能し、リモート通知をプッシュするという Apple のアプローチとは少し異なることを私は知っています。ただし、このアプローチを考慮に入れることができない多くの理由があります。その 1 つは、ユーザー認証メカニズムです。リモート サーバーは、セキュリティ上の理由から、ユーザーの資格情報を考慮することができません。私にできることは、ログインとフェッチのコアをクライアント (iPhone) に移動することだけです。
Apple が、アプリケーションがソケット接続 (つまり、VoIP アプリケーション) を起動して開いたままにする機会を提供していることに気付きました。
ということで、こんな感じで調べ始めました。plist に必要な情報を追加しました。appDelegate で次のようなものを使用して、アプリケーションを「起動」できます。
NSOperation は、次のブロック コードを使用してバックグラウンド タスクを開始します。
上記のコードは (時々) 動作するように見えますが、他の多くの場合、アプリケーションがクラッシュし、次のログ情報が表示されます。
尋ねる人のために、はい。Async NSURLConnection アプローチも試しました。どんなに。タイムアウト ハンドラと didFinishLoading:WithError で非同期アプローチを使用しても、同じようにクラッシュします。
私は立ち往生しています。どんなヒントでも大歓迎です。
objective-c - ブロックtypedefへの前方参照を宣言しますか?
1つのヘッダーファイルに次のようなものがあります。
別のヘッダーファイルで同じ正確な参照を使用する必要があります。
もちろん、#import
あるヘッダーファイルを別のヘッダーファイルにインクルードしたり、グローバルプリコンパイル済みヘッダーにtypedefをインクルードしたりできますが、代わりにブロックtypedefを前方参照する方法はありますか?
c - cブロックが常に改行ではなく^の直後に{を持っている理由はありますか?
私のコーディングスタイルは、常に改行にオープニングブレースを付けることです。
Appleは以前はこのスタイルに従っていましたが{
、関数と同じ行にあるように変更されました。ブロックを使用する場合、Appleコードには常に:の{
直後があります。^
ブロックで私のスタイルを使用することが問題になる理由はありますか?例えば:
私は自分のスタイルが好きですが、それがブロックに問題を引き起こす場合は、それを再考する必要があります。
明確化
この質問は、C言語のBlocks拡張に関するものです。中括弧についての一般的な質問ではありません。問題は、Blocks拡張機能がコードスタイルに何らかの影響を与えるかどうかです。