3

@selector(foo:bar:)Objective-C では、セレクターを取得 (または作成? したがって質問) する方法が少なくとも 2 つありますNSSelectorFromString(@"foo:bar:")。しかし、セレクターの寿命は?

セレクターは (少なくとも) 自分の名前を知っているので、プログラム内でシャッフルできる固定サイズのコピー可能な値である可能性は低いです。これは、誰かがそれらを割り当てたり、場合によっては割り当てを解除したりする必要があることを意味します。Cocoa フレームワークのほとんどのオブジェクトには保持解放セマンティクスがあり、これにより所有権が明示的になり、追跡が比較的容易になります。ただし、セレクターの所有権の明確な概念はわかりません。

最初の構文で取得されたセレクターは、プログラムの存続期間中 (リテラル文字列のように) グローバルとして存続することを期待していますが、もう一方はどうでしょうか? でセレクターを作成/取得するとNSSelectorFromString(@"foo:bar:")、プログラムの全期間にわたって有効になりますか?

4

2 に答える 2

6

「作成」ではなく「取得」です。どちらも、ランタイム システムによって作成および所有されるセレクターを取得するだけです。したがってSEL、 の寿命は事実上不滅です。

自分でセレクターを作成したい場合は、ランタイム関数を使用する必要がありますsel_registerName()。この関数はNSSelectorFromString()、ランタイムにまだ知られていない名前を渡す場合に使用されます。

于 2012-10-29T00:23:08.513 に答える
4

Apple のドキュメントによると、セレクターはグローバルに登録され、永久に存続します。新しいセレクター名または未知のセレクター名を渡すNSSelectorFromStringと、新しいセレクターとして登録されます。

于 2012-10-29T00:24:41.383 に答える