copy與strong修飾的對象賦值區(qū)別

- (void)makeCopy

{

NSMutableString *string = [NSMutableString stringWithFormat:@"哈哈哈哈"];

NSString *str = [string copy];

[string appendString:@"你好"];

[string stringByAppendingString:@"yoyou"];

NSLog(@"%p,%p",str,string);

//內(nèi)存地址p>str:0x7fd3dae79c00

//p>string:0x7fd3dae78640

NSLog(@"%@,%@",str,string);

//str:哈哈哈哈

//strong:哈哈哈哈你好

//可見,是兩個不同的內(nèi)存地址,為什么呢?

//因為,對可變對象進行拷貝,是內(nèi)容拷貝

//對不可變對象,進行拷貝,是指針拷貝

//所以,NSString,NSArray,NSDictionary等對象進行拷貝的時候,使用copy無論給我傳入是一個可變對象還是不可變對象,我本身持有的就是一個不可變的副本.

//就像給model賦值,字符串類型都是copy,防止外部對象是可變的,要是修改了影響我自身的值。

//string變化了,但是str還是不變的。

//綜上,NSString 對象使用copy拷貝,保證數(shù)據(jù)不修改變化

}

- (void)mutablecopy

{

NSMutableArray *mutableArray = [[NSMutableArray alloc] init];

NSArray *array = @[ @1, @2, @3, @4 ];

self.array = mutableArray;

[mutableArray removeAllObjects];;

NSLog(@"%@",self.array);

//()<__NSArrayM 0x7ff9d8f03370>(

//? ? )

[mutableArray addObjectsFromArray:array];

self.array = [mutableArray copy];

[mutableArray removeAllObjects];;

NSLog(@"%@",self.array);//(__NSArrayI *) $0 = 0x00007ff9d8f21560 @"4 elements"

//(

//? ? 1,

//? ? 2,

//? ? 3,

//? ? 4

//? ? )

//mutableArray先后的變化,影響了self.array的值

//綜上,strong 修飾的變量,會根據(jù)拷貝的對象的類型不同進行修改

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容