比方說,我有NSString類型string1和string2,string2被分配爲string2 = string1。如果string1更新爲其他值,則相應地更新string2 WAS NOT。爲什麼NSString和NSMutableArray的改變行爲是不同的?
NSString *string1 = @"hello world";
NSString *string2 = string1;
NSLog(@"string 1: %@", string1);
NSLog(@"string 2: %@", string2);
NSLog(@"===================");
string1 = @"hello world(changed)";
NSLog(@"string 1: %@", string1);
NSLog(@"string 2: %@", string2);
但是,如果我有NSMutableArray的類型ARRAY1和數組2,數組2被分配了作爲 數組2 = ARRAY1。如果array1更新爲其他值,則相應地更新array2 WAS。
NSMutableArray *array1 = [NSMutableArray new];
NSMutableArray *array2 = [NSMutableArray new];
[array1 addObject:@"hello"];
array2 = array1;
NSLog(@"array 1: %@", array1);
NSLog(@"array 2: %@", array2);
NSLog(@"===================");
[array2 addObject:@"world"];
NSLog(@"array 1: %@", array1);
NSLog(@"array 2: %@", array2);
我知道,NSString的情況下,如果我想使字符串1和字符串都是一樣的,我可以做字符串2的指針指向字符串1,NSString __strong **string2= &string1;
和NSMutableArray的情況下,我可以使用array2 = [array1 copy]
如果我不想array2始終與array1相同。
但我的問題是,在我看來他們都是對象類型和NSObject的子類。這種不同的行爲的原因是什麼?一個不更新,另一個更新時會相應更新?
你的例子完全不同。在你改變'array1'之後,你將數組'array1'分配給'array2'。但是在改變'string1'之前,你將字符串'string1'分配給'string2'。 – rmaddy
不要:'NSString __strong ** string2 =&string1;',它只會導致混淆和顛覆Objective-C對象。 – zaph