問題タブ [objective-c-runtime]

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

objective-c - Objective-C クラスまたはインスタンスのすべてのメソッドを取得する

Objective-C では、特定のクラスまたはインスタンスが特定のセレクターに応答するかどうかをテストできます。しかし、クラスまたはインスタンスのすべてのメソッドまたはクラスのプロパティ (たとえば、すべてのメソッドまたはプロパティのリスト) を照会するにはどうすればよいでしょうか?

0 投票する
10 に答える
23918 参照

objective-c - Objective-C がプライベート メソッドをサポートしないのはなぜですか?

Objective-Cでセミプライベート メソッドを宣言するための多くの戦略を見てきましたが、真のプライベート メソッドを作成する方法はないようです。私はそれを受け入れます。でも、どうしてこうなるの?私が行ってきたすべての説明は、基本的に「あなたにはできないが、これは近似値だ」と言っています。

(メンバー) に適用され、ivarsそのスコープを制御する多くのキーワードがあります。メソッドに対してもこれを行うことができないのはなぜですか? ランタイムがサポートできるはずの何かのようです。私が見逃している根底にある哲学はありますか?これは意図的なものですか?@private@public@protected

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

c - Objective-Cランタイムはどのようにしてルートメタクラスと他のクラスの説明をインスタンス化しますか?

基本的なオブジェクト指向のANSICランタイムを実装し、Objective-Cをガイドとして使用しようとしています。

それらは3つの部分のようです。クラスの説明、クラスインターフェイス、およびクラスの実装。クラスインターフェイスをインスタンス化するために、Classオブジェクトを使用してオブジェクトをインスタンス化するおなじみの方法は、ランタイムがクラスの説明を使用してクラスオブジェクトをすでにインスタンス化した場合にのみ発生します。

では、すべてのクラス定義は、Classオブジェクトを使用してインスタンス化する機能を提供するために、最初の実行時に静的に割り当てられますか?または、それらが動的に(最初の呼び出しで)割り当てられる場合、どのように?それは実行ループの一部ですか、それともクラスは実際にメッセージを転送する前にすでに割り当てられているかどうかを判断する関数ですか?

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

objective-c - Objective-Cで特定のクラスの現在インスタンス化されているオブジェクトのリストを取得するには?

class_poseAs(..) は Objective-C 2.0 で非推奨になったため、実行時にオブジェクトのクラスを変更する別の方法を見つける必要があります。object_setClass(..) を使用してオブジェクトのクラスを変更できることがわかりました。私の問題は、特定のクラスの現在のインスタンスをすべて見つけて更新することです。

解決策は、更新する可能性のあるインスタンスのグローバル ディクショナリを維持することですが、リフレクティブ API からそのようなコレクションを取得する方法が既にあるかどうかを知りたいです。

Apple のランタイム リファレンスを確認しましたが、有用なものが見つかりません。class のメソッドだけをmethod_exchangeImplementations(..)で更新することは、 superを使用して古い実装を再利用できるようにしたいので、私にとっては解決策ではありません。

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

objective-c - +(void)initializeはスレッドロックを行いますか?

「初期化」の定義を見てみましょう。

討論

ランタイムは、クラスまたはそれを継承するクラスがプログラム内から最初のメッセージを送信する直前に、プログラム内の各クラスに初期化を送信します。(したがって、クラスが使用されていない場合、メソッドが呼び出されることはありません。)ランタイムは、スレッドセーフな方法で初期化メッセージをクラスに送信します。スーパークラスは、サブクラスの前にこのメッセージを受け取ります。

初期化は「スレッドセーフな方法」で送信されると述べられています。隠れて、ランタイムはその呼び出しをスレッドセーフにするためのロックを作成していますか、それともランタイムの動作方法から本質的にスレッドセーフですか?ロックする場合、+ initializeを実装すると、ランタイムが他の方法では作成しなかったロックを作成することを意味しますか?

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

objective-c - Objective-Cクラス->次のような文字列:[NSArray className]-> @ "NSArray"

クラスオブジェクト自体からクラスの文字列名を取得しようとしています。

私は見つけましobject_getClassName(id obj)たが、インスタンスを渡す必要があります。私の場合、それは不必要な作業です。

では、インスタンスではなく、クラスオブジェクトから文字列を取得するにはどうすればよいですか?

0 投票する
4 に答える
591 参照

iphone - インスタンスがまだメモリ内にあるかどうかを確認する方法はありますか?

例: ビュー コントローラーがあり、それを取り除きます。しかし、メモリアドレスを保持する変数がまだあります。それにアクセスすると、EXEC_BAD_ACCESS になります。もちろん。しかし:その変数がまだ有効かどうかを確認する方法はありますか? つまり、メモリ内に存在するものをまだ指している場合はどうなりますか?

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

iphone - iSimulate自動フック

iSimulateがデバッグされたiDeviceアプリケーションに自動的に登録/フックする方法を誰かが知っているかどうか疑問に思いましたか?静的ライブラリ(およびいくつかのフレームワーク)を含めるのと同じくらい簡単で、機能します。呼び出すメソッドや関数はありません。これはどのように可能ですか?

0 投票する
4 に答える
2346 参照

objective-c - Objective C での動的クラスの構築

私はある程度有能な Ruby プログラマーです。昨日、ついに Apple の Cocoa フレームワークを試してみることにしました。ObjC の方法で物事を見るのを手伝ってください。

私は頭を動かそうとしていobjc_allocateClassPairますobjc_registerClassPair. 私の目標は、いくつかのクラスを動的に生成し、他のクラスと同じように使用できるようにすることです。これは Obj C で機能しますか?

class を割り当てて登録Aすると、呼び出し時にコンパイル エラーが発生します[[A alloc] init];( と表示されます'A' Undeclared)。Aランタイムのメソッドを使用してのみインスタンス化できますobjc_getClass。私のようにコンパイラAにメッセージを伝えて渡す方法はありますNSStringか? コンパイラフラグか何か?

10 ほどの他のクラス ( BC、…) があり、すべて同じスーパークラスがあります。[A classMethod]を必要とせずに、コード ( 、[B classMethod]、…)で直接メッセージを送信したいobjc_getClass。ここであまりにも動的にしようとしているのですか、それとも単に実装を台無しにしているのでしょうか? こんな感じ…</p>

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

objective-c - 転送クラス メッセージ

を使用してクラスのインスタンスにメッセージを転送できることを知っています-forwardInvocation:。クラス オブジェクトに送信されたメッセージに対して同じことを行うことはできますか (のように+forwardInvocation:)?