@propertyで宣言されたNSString(またはNSArray,NSDictionary)はcopyキーをよく使用しますが、なぜですか?strongキーワードを変更すると、どのような問題が発生しますか?(回転)
1583 ワード
1、親ポインタは子オブジェクトを指すことができるので、copyを使用する目的は、本オブジェクトの属性が外部の影響を受けないようにするためであり、copyを使用することは、私に可変オブジェクトであるか不可オブジェクトであるかにかかわらず、私自身が持っているのは可変のコピーである.
2、strongを使用すると、この属性は可変オブジェクトを指す可能性があり、この可変オブジェクトが外部で修正すると、その属性に影響を与える.
copyという特質が表す所属関係はstrongと類似している.ただし、設定方法は新しい値を保持するのではなく、コピー(copy)します.プロパティ・タイプがNSStringの場合、設定メソッドに渡される新しい値がNSMutablesStringクラスのインスタンスを指す可能性があるため、この特質はパッケージ性を保護するためによく使用されます.このクラスはNSStringのサブクラスで、値を変更できる文字列を表します.この場合、文字列をコピーしないと、属性を設定した後、文字列の値がオブジェクトが知らないうちに変更される可能性があります.したがって、この場合は「可変」(immutable)の文字列をコピーし、オブジェクトの文字列値が無意識に変動しないようにします.アトリビュートを実装するオブジェクトが「可変」(mutable)である限り、新しいアトリビュート値を設定するときにコピーする必要があります.
この方法を理解するには、まず、非集合クラスオブジェクトに対するcopy操作を理解する必要があります.
非集合クラスオブジェクトでは、immutableオブジェクトに対してcopy操作を行い、ポインタコピーであり、mutableCopy操作時にコンテンツコピーを行う.mutableオブジェクトに対してcopyとmutableCopyを行うのはコンテンツコピーです.以下をコードで簡単に表します.
たとえば、次のコードがあります.
メモリを表示すると、string、stringCopyのメモリアドレスが異なり、コンテンツのコピー、深いコピーが行われていることがわかります.次の操作を行っても、
stringCopyの値もそのためには変わりませんが、copyを使用しないとstringCopyの値が変わります.クラスオブジェクトを集約します.だから、
@propertyでNSString、NSArray、NSDictionaryを宣言するときにcopyキーをよく使用するのは、対応する可変タイプがあるためです.NSMutableString、NSMutableArray、NSMutableDictionaryです.オブジェクトの文字列値が何気なく変動しないように、新しいプロパティ値を設定するときにコピーする必要があります.
2、strongを使用すると、この属性は可変オブジェクトを指す可能性があり、この可変オブジェクトが外部で修正すると、その属性に影響を与える.
copyという特質が表す所属関係はstrongと類似している.ただし、設定方法は新しい値を保持するのではなく、コピー(copy)します.プロパティ・タイプがNSStringの場合、設定メソッドに渡される新しい値がNSMutablesStringクラスのインスタンスを指す可能性があるため、この特質はパッケージ性を保護するためによく使用されます.このクラスはNSStringのサブクラスで、値を変更できる文字列を表します.この場合、文字列をコピーしないと、属性を設定した後、文字列の値がオブジェクトが知らないうちに変更される可能性があります.したがって、この場合は「可変」(immutable)の文字列をコピーし、オブジェクトの文字列値が無意識に変動しないようにします.アトリビュートを実装するオブジェクトが「可変」(mutable)である限り、新しいアトリビュート値を設定するときにコピーする必要があります.
この方法を理解するには、まず、非集合クラスオブジェクトに対するcopy操作を理解する必要があります.
非集合クラスオブジェクトでは、immutableオブジェクトに対してcopy操作を行い、ポインタコピーであり、mutableCopy操作時にコンテンツコピーを行う.mutableオブジェクトに対してcopyとmutableCopyを行うのはコンテンツコピーです.以下をコードで簡単に表します.
[immutableObject copy] //
[immutableObject mutableCopy] //
[mutableObject copy] //
[mutableObject mutableCopy] //
たとえば、次のコードがあります.
NSMutableString *string = [NSMutableString stringWithString:@"origin"];//copy
NSString *stringCopy = [string copy];
メモリを表示すると、string、stringCopyのメモリアドレスが異なり、コンテンツのコピー、深いコピーが行われていることがわかります.次の操作を行っても、
[string appendString:@"origion!"]
stringCopyの値もそのためには変わりませんが、copyを使用しないとstringCopyの値が変わります.クラスオブジェクトを集約します.だから、
@propertyでNSString、NSArray、NSDictionaryを宣言するときにcopyキーをよく使用するのは、対応する可変タイプがあるためです.NSMutableString、NSMutableArray、NSMutableDictionaryです.オブジェクトの文字列値が何気なく変動しないように、新しいプロパティ値を設定するときにコピーする必要があります.