問題タブ [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.
iphone - ブロックを使用してNSDictionaryを文字列に変換しますか?
ブロックを使用してこれを行う方法があると確信していますが、私にはわかりません。NSDictionaryをURLスタイルのパラメーター文字列に変換したいと思います。次のようなNSDictionaryがある場合:
次に、それを次のような文字列に変換するにはどうすればよいですか。
編集
以下の手がかりをありがとう。これはそれを行う必要があります:
xcode - Xcode リンカーとブロック: 未定義のシンボル "___block_global_1"
Xcode 3.2.4 でアプリケーションをビルドしようとしていますが、次のリンカー エラーが発生します。
エラーの原因となっている可能性のあるソース ファイルで行ったことを説明するのに途方に暮れています。次のように、グローバル変数として定義しているブロックがあります。
このブロックは、ソースの空の名前空間で定義されています (Objective-C++ をコンパイルしています)。すべてがエラーなしでコンパイルされます。
更新:ブロックを参照するルーチンのローカル変数になるようにブロックを移動することは、実行可能な (推奨されませんが) 回避策です。
何を与える?
iphone - addTarget:action:forControlEvents:メソッドと同等のUIButtonブロック?
周りを見回しましたが、インターネットでもAppleのドキュメントでも見つからなかったので、存在しないと思います。
しかし、iOS4ブロックと同等のAPIはありますか?
これはカテゴリを使用して実装できると思いますが、極端な怠惰のために自分でこれを書くのはやめたほうがいいです:)
このようなものは素晴らしいでしょう:
objective-c - Doxygen の Apple のブロック拡張機能にコメントするには?
Doxygen はバージョン 1.7.2 の変更ログで、Apple のブロック拡張機能をサポートすることを発表しました。ドキュメントを生成するための構文は何なのだろうか。ヒントは見つかりませんでした-doxygen構成ファイル(バージョン1.7.2)にもありません。
更新: 2011 年 8 月 14 日にバージョン 1.7.5 がリリースされました。それでも、Apple ブロックのドキュメントの書き方がわかりませんでした。
objective-c - Objective-cのSmalltalkブロック?
Objective-C は "a la Smalltalk" のブロックをサポートしていますか?
Smalltalk では、ブロックは、他の言語で見られる「クロージャー」、「ラムダ式」、または「名前のない関数」に似ています。
ios - Objective-C ブロックをプロパティとして使用できますか?
標準のプロパティ構文を使用してブロックをプロパティとして持つことは可能ですか?
ARCに変更はありますか?
objective-c - 戻り値としての Objective-C ブロック型
次のように書くにはどうすればよいですか。
typedefなしで?
iphone - Objective-C ブロックを直接呼び出した場合は EXC_BAD_ACCESS
Objective-C のブロックを理解する試みを続けています。私は次の機能を持っています:
次のことをしようとすると:
EXC_BAD_ACCESS を取得します。ただし、代わりに次のようにすると:
それは正常に動作します。最初のシナリオの問題は何ですか?
objective-c - Objective C ブロック:「自己」が保持されないようにする方法はありますか?
これをできるだけ簡潔に書き留めようとしていますが、説明するのは簡単ではありません-読んでくれてありがとう=)
私は、オープン ソース iPhone フレームワークSparrowの主な開発者です。Sparrow は Flash AS3 ライブラリをモデルにしているため、AS3 と同様のイベント システムを備えています。現在、そのシステムはセレクターを指定することで機能しますが、イベント リスナーにブロックを使用できるようにすることで、そのシステムを拡張したいと考えています。ただし、メモリ管理の問題につまずいています。
現在処理されているイベントの典型的な使用例を紹介します。
これは非常に簡単です。オブジェクトが表示リストに追加されると、イベントを受け取ります。現在、基本クラスはイベント リスナーを NSInvocation-objects の配列に記録します。NSInvocation は、そのターゲットと引数を保持しない方法で作成されます。(ユーザーはそれを行うことができますが、99% の場合は必要ありません)。
これらのオブジェクトが保持されないのは意識的な選択でした: そうしないと、ユーザーが dealloc-method でイベント リスナーを削除したとしても、上記のコードによってメモリ リークが発生します! 理由は次のとおりです。
一見すると、これで問題ないように見えます。init メソッドの保持は、dealloc メソッドのリリースと対になっています。ただし、保持カウントがゼロにならないため、dealloc メソッドが呼び出されることはないため、これは機能しません。
私が言ったように、「addEventListener...」メソッドは、まさにこの理由で、デフォルト バージョンでは何も保持しません。イベントの仕組み (ほとんどの場合、イベントは「自己」または子オブジェクトによってディスパッチされ、とにかく保持されます) のため、それは問題ではありません。
しかし、ここで問題の中心部分に行き着きます。ブロックではそれを行うことはできません。私が望むように、イベント処理のブロックバリアントを見てください:
それは見栄えがよく、非常に使いやすいでしょう。ただし、ユーザーが「self」でメソッドを呼び出したり、ブロック内でメンバー変数を使用したりすると (ほとんどの場合)、ブロックは自動的に「self」を保持し、オブジェクトの割り当てが解除されることはありません。 .
今、私は、次のように自己への __block 参照を作成することで、任意のユーザーがこれを修正できることを知っています:
しかし、正直なところ、ほとんどすべてのユーザーがそうするのを知らないか、そうするのを忘れていると確信しています。API は使いやすいだけでなく、誤用されにくいものであるべきですが、これは明らかにその原則に違反しています。API のユーザーは間違いなく誤用します。
私を悩ませているのは、「自己」を保持する必要がないことを知っていることです。現在の実装では、保持しなくても機能します。だから私は、彼が自分自身を保持する必要がないことをブロックに伝えたい - 私、ライブラリは、ユーザーがそれについて考える必要がないように、ブロックにそれを伝える必要がある.
私の研究では、そうする方法は見つかりませんでした。そして、そのブロックの制限に合わせてアーキテクチャを変更する方法が思いつきません。
私がそれについて何ができるか考えている人はいますか?
まだ読んでいない場合でも、ここまで読んでくれてありがとう -- 冗長な質問だったことは承知しています ;-)
ios - NSDictionary アイテムを持つ NSMutableArray からの一意のアイテム?
次のような 3 つの NSDictionary を持つ NSMutableArray がある場合:
これを 2 つの文字列 { steve, paul } だけの配列に変換するにはどうすればよいでしょうか。つまり、元の NSMutableArray からの一意の名前ですか? ブロックを使用してこれを行う方法はありますか?