0

のサブクラスを作成していますNSURL(の提携サブクラスとともにNSURLProtocol)。URL の読み込みで取得して使用することを意図して、URL オブジェクトに追加のデータ プロパティを意図的に隠しています。(これは単なる実験です。判断しないでください。)

しかし、これらのカスタム URL オブジェクトの 1 つを作成してクラス コンボをテストし、そこからロードしようとすると...

NSData * data = [NSData dataWithContentsOfURL:myURL];

...私の URL プロトコルは、私が作成したインスタンスではなく、検査する実際の NSURLインスタンスを受け取ります。absoluteStringこれは私が期待していることです。つまり、読み込み中の内部が元の URL を新しい URL にコピーしましたが、それは私のカスタム サブクラスではないため、追加のプロパティがありません。

私のサブクラスは、NSCopying コンプライアンスとコンプライアンスの両方を正しくオーバーライドすることにNSURL注意してください。これにより、クラスのインスタンスの浅いコピーまたは深いコピーを作成する人は、完全で正しいコピーを取得できるようになります。ただし、このプロセス中にこれらのメソッドは呼び出されません。(どちらも、、などではありません)-copyWithZone:-initWithCoder:-encodeWithCoder:NSSecureCodingabsoluteStringpathrelativeString

誰かが、私の URL の (文字列) の内容を、私が期待するメソッドを呼び出さずに「コピー」しています。別の Foundation クラスがパブリック インターフェイスをバイパスし、プライベート/内部プロパティにアクセスしてこれを行うことができると思います。

NSURL が基本的にサブクラス化できないかどうか誰でも確認できますか? または、何か不足している可能性がある場合は?

4

0 に答える 0