最初の質問
オブジェクトのプロパティがObjective-Cに保持されている場合、同じクラスの2番目のインスタンスが同じオブジェクトを指すのはなぜですか?新しいクラスをインスタンス化する場合は、論理的には、個別のプロパティを持つ個別のクラスが必要になります。retain
私は、保持数を増やすだけで、copy
コピーを浅くすることを理解しています。
を保持するクラスを作成しましたNSURLRequest
。そのクラスの2つのインスタンスを初期化しました。作成されたクラスのいずれかのプロパティを変更すると、すべてのクラスが変更されます。プロパティでコピーを使用すると、それが停止しました。ただし、オンラインで読むとcopy
、不変オブジェクトは変更できないため、個別のエンティティは実際には必要ないため、本質的に浅いコピーであると言われています。この場合、は不変ですが、不変のオブジェクトを深くコピーしたと思われるオブジェクトNSURLRequest
を呼び出すことで、私の例はどのように機能しましたか?copy
これが私がそれをコピーした方法です:
- (id)initWithRequest:(NSURLRequest *)request {
self = [super initWithNibName:nil bundle:nil];
if (self) {
_request = [request copy];
}
return self;
}
2番目の質問
私は、本質的にすべての不変オブジェクトに対して、使用する必要がcopy
あり、可変オブジェクトに対して使用する必要があることを読んでいますretain
(または現在ARCでstrong
)。IBOutletsがweak
ポインターの場合、Interface Builderなしでビューを描画するとどうなりますか?UIKit
要素はcopy
またはretain
/strong
ですか?
ありがとう!