Я читал в Какао и цель C: работа и запуск , что -copy
всегда будет возвращать неизменяемый объект и -mutableCopy
всегда будет возвращать изменяемый объект:
Важно знать, что вызов
-copy
для изменяемого объекта возвращает неизменяемый объект. версия. Если вы хотите скопировать изменяемый объект и сохранить изменчивость в новой версии, вы должны вызвать-mutableCopy
в оригинале. Однако это полезно, потому что, если вы хотите чтобы «заморозить» изменяемый объект, вы можете просто вызвать для него-copy
.
Итак, у меня есть что-то вроде этого:
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] init];
NSLog( @"%@", [req className] ); // NSMutableURLRequest
NSLog( @"%@", [[req copy] className] ); // NSMutableURLRequest
NSLog( @"%@", [[req mutableCopy] className] ); // NSMutableURLRequest
Согласно этому предыдущему ответу :
Вы не можете полагаться на то, что результат копирования будет изменяемым! Копирование
NSMutableArray
может вернутьNSMutableArray
, поскольку это исходный класс, но копирование любого произвольногоЭкземпляр NSArray
не будет.
Кажется, это несколько изолировано от NSURLRequest
, поскольку NSArray
действует как задумано:
NSArray *arr = [[NSMutableArray alloc] init];
NSLog( @"%@", [arr className] ); // __NSArrayM
NSLog( @"%@", [[arr copy] className] ); // __NSAraryI
NSLog( @"%@", [[array mutableCopy] className] ); // __NSArrayM
Итак ...
-copy
возвращает неизменяемый объект (как и ожидалось), а когда - изменяемый объект?