問題タブ [isa-swizzling]

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 投票する
1 に答える
2417 参照

objective-c - 私のisa-swizzlingはKVOを壊します

特定のオブジェクトのdeallocメソッドでいくつかのアクションを実行する必要があるため、isaスウィズリングを実装しようとしています。私はオーバーライドしています-(クラス)クラス; 元のクラスを返すメソッド(KVOのように)。スウィズルされたオブジェクトにオブザーバーを追加しようとするまで、すべてが正常に機能します。クラッシュするだけです。

  1. 0x00000000の0x00000000()
  2. _NSKeyValueRetainedObservationInfoForObjectの0x0091d22a()
  3. 0x0092ec88 in-[NSObject(NSKeyValueObserverRegistration)_addObserver:forProperty:options:context:]()
  4. 0x0092d6fd in-[NSObject(NSKeyValueObserverRegistration)addObserver:forKeyPath:options:context:]()

これがスウィズリングの実装です

MDDummyは、従来の方法でクラスを保持するメソッドにすぎません(これとraw関数の追加に違いはありません)。

編集:

class_addMethodFromClass関数の実装は次のとおりです。

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

isa-swizzling - Pythonで2つの行列を追加するのに問題があります

Python 3で2つのマトリックスを追加したいのですがinput、プログラムに追加すると問題が発生します

これが私のコードです

入力が

マトリックスを入力してください:[[5,6], [1,2], [2,4]]

別のマトリックスを入力してください:[[2,3], [-6,0], [-2, 4]]

出力は[['[[']、['[[']、['52']、[' ,,']、['63']、[']]']、[' 、、 ']、['']、[' [[']、[' 1-']、['、6']、[' 2、']、['] 0']、['、]']、 ['、']、['[']、['2 [']、['、-']、['42']、[']、']、[']']]

inputしかし、私がプログラムから取り出して、

次に、[[7, 9], [-5, 2], [0, 8]]どちらが正しいかという出力が出力されます。

プログラムを機能させて、人が2つの行列を入力したときに、それらが加算されるようにする方法はありますか?私はPythonを初めて使用するので、助けていただければ幸いです:)

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

vb.net - オブジェクトはスーパークラスとして作成されました。これをサブクラスに変換したい

Projects、Tables、Rows、および Fields という汎用データ オブジェクトを含むライブラリが提供されました。私のプログラムには、Building という単一のプロジェクトがあり、そのテーブル 1 には「ユニット」が含まれ、テーブル 1 のフィールド 1 は「ユニット名」です。それで私がしたことは...

それはそれほど悪く見えませんか?しかし、私は Unit オブジェクトをロードしていません。Row を持っています。それで、別のクラスも作成する必要があります...

そしてもちろん、Units のリスト、およびその他の数十のリストとアクセサーを取得できるように、建物のリストを作成する必要があります。別。

それは機能し、配送が機能であることを知っています. しかし、私が本当にやりたいのは、次のようなユニットを作成することです...

次に、List(Of Row) を List(Of Unit) に「逆キャスト」します。これにより、多くのコードが削除されるだけでなく、ダングリング ポインターが削除され、メモリが大幅に削減され、時間がかかるセットアップ セットが削除されます。理論的には可能ですが、コード以外に違いはありませんが、VB.Net でそれを行う方法がわかりません。

Obj-C では、これはスウィズリング (および/または拡張機能) と呼ばれ、Java にも同様の概念があると思います。ADO.Net はこのようなことをしなければならないと思いますか? 私が見逃している「これをその中にラップする」機能はありますか?

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

objective-c - ISA スウィズリングと「super」の呼び出し

次のクラス階層を想定します。クラスAは公に宣言されています:

クラス_Bは のプライベート サブクラスですA:

クラス のオブジェクトは、 のインスタンスを作成して返すAファクトリ メソッド を使用してのみ作成する必要があると仮定します。createInstance_B

Aのインスタンスの機能をインスタンスごとに強化したいと考えています。そこで、次のことを達成するために ISA スウィズルを実行することにしました。

そして、NSObjectカテゴリに対して次のメソッドを使用して ISA スウィズリングを行います (ここに示されている単純な実装)。

[super a];すべてが機能しているように見えますが、期待どおりに動作しないことに気付きました。-[A a]実行時のスーパークラスが実際に_B.

への呼び出しを次のコードに置き換えるとsuper機能しますが、見苦しく、開発者による知識と作業が必要です。

呼び出し時にコンパイラは何を発行し、superこの発行されたコードを変更する方法はありますか?