問題タブ [nsfastenumeration]
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 - ARCでのNSFastEnumerationオブジェクトのキャスト
カスタム クラスでNSFastEnumerationcountByEnumeratingWithState:objects:count:
プロトコルのメソッドを実装しようとしています。
これまでのところ、オブジェクトを正しく反復処理していますが、返されるオブジェクトは Objective-C オブジェクトではなく、コアとなる基盤の同等物です。
state->itemsPtr を設定するコードの一部を次に示します。
MyCustomCollection.m
次に、このように「for..in」ループを別の場所で呼び出します
SomeOtherClass.m
コンソール出力は次のとおりです。
ご覧のとおり、NSFastEnumeration プロトコル メソッド内では、オブジェクトは正常に出力されますが、キャストされるとすぐにid __unsafe_unretained *
、元の Objective-C 対応クラスが失われます。
正直なところ(__unsafe_unretained id *)(__bridge void *)
、この場合のキャスティングがどのように機能するかはよくわかりません。は(__unsafe_unretained id *)
、適切なタイプの itemsPtr のニーズに一致するようにキャストされているようです。は(__bridge void *)
、obj-c ワールドを CF ワールドにブリッジするために使用される __bridge を使用して、タイプ void のポインターにキャストするようです。llvm docsに従って、次の場合__bridge
:
所有権の譲渡はなく、ARC は保持操作を挿入しません。
あれは正しいですか?
私の理解では、__NSCFConstantString は NSString に相当するコア基盤にすぎません。また、ARC では、Objective-C オブジェクトから同等の CoreFoundation オブジェクトにブリッジする必要があることも理解しています。これは、ARC が後者のメモリを管理する方法を知らないためです。
「for..in」ループ内のオブジェクトが元のタイプになるようにするにはどうすればよいですか?
また、この場合、コレクションに NSStrings を追加していますが、理論的にはすべてのオブジェクトをサポートする必要があることに注意してください。
アップデート
ロブの答えは正しい軌道に乗っていますが、その理論をテストするために、for ループを次のように変更しました。
理論的には、オブジェクトは同等であるため機能するはずですが、次のエラーでクラッシュします。
ループで返されるオブジェクトは、for
インスタンスではなくクラスのように見えます。ここで何か他のことが間違っているかもしれません...これについて何か考えはありますか?
更新 2: ソリューション
次のように簡単です: (CodaFi のおかげで
objective-c - NSPointerArray を使用して、不透明なポインターを反復処理する方法は?
NSMapTable
私は最近、従来のコレクションのように機能するやのようなこれらのクラスを発見しましNSPointerArray
たが、弱い参照や単純な古い C ポインターも格納できます。残念ながら、for...in
構文を使用して非NSObject
ポインターを反復処理することはできないようです。例えば:
コンパイラは最後の行が好きではありません。エラー:
セレクター要素タイプ 'Segment *' (別名 'struct Segment *') は有効なオブジェクトではありません
それで、私はこれをする必要がありますか?
それは世界の終わりではありませんが、確認したいだけです。
ios - How to implement countByEnumeratingWithState:objects:count: for class that internally use NSMutableArray
I wanted to use
TBL_CardView is my custom class, and cardsInHand
is just (TBL_CardViewArray*)
So I need to implement countByEnumeratingWithState:objects:count:
for my TBL_CardViewArray
class.
Is this correct ?
This is my TBL_CardViewArray.h
Some important part from TBL_CardViewArray.m
So I am just using TBL_CardViewArray
as s wrapper around NSMutableArray for storing my TBL_CardView
class.
Question
How to implement countByEnumeratingWithState:objects:count: for my TBL_CardViewArray
class.
I did google it, but not found some example that I could reuse easy.
My assumption is that because I am already using NSMutableArray for storing that it is not so complicated, but I can not figure it how ?
ios - iOSで高速列挙を使用してスクロールビューのすべてのサブビューから固定数のサブビューを取得する方法
iOSで高速列挙を使用して、スクロールビューのすべてのサブビューからサブビューの修正番号を選択する方法は?
ios - クラスメンバーのNSFastEnumeration
すべてのクラス メンバー変数の列挙を返すカスタム クラスに NSFastEnumeration を実装するにはどうすればよいですか?
CHCSVParser ( https://github.com/davedelong/CHCSVParser ) を使用して、このデータを csv にエクスポートしようとしています。Employee クラス オブジェクトの配列に対して writeLineOfFields を呼び出すにはどうすればよいですか?
objective-c - ループ変数がループ後に「nil」になるのはなぜですか
私は持っている:
ループ ブロックは変更されませんserver
。
servers
with dictionaries でありNSMutableArray
、ループ中に変更されないプロパティです。
ループが終了した後にserver
値があるのはなぜですか?nil
ループ後にこのような変数を使用したのは初めてでした。あまり考えずに、(古い C 時代に)次のように動作すると想定しました。