моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Чтобы напечатать адрес объекта, на который указывает указатель, и адрес самого указателя, вы можете использовать %p
символ формата для вывода адреса указателя.Следующий код показываетoriginalString
иcopiedString
Адрес указателя и адрес, указывающий на объект:
NSString *originalString = @"Hello, World!";
NSString *copiedString = [originalString copy];
// 打印字符串内容
NSLog(@"Original: %@", originalString); // 输出: Hello, World!
NSLog(@"Copied: %@", copiedString); // 输出: Hello, World!
// 打印指针本身的地址
NSLog(@"Original pointer address: %p", &originalString);
NSLog(@"Copied pointer address: %p", &copiedString);
// 打印指针指向对象的地址
NSLog(@"Original object address: %p", originalString);
NSLog(@"Copied object address: %p", copiedString);
Результаты работы Xcode версии 15.1 (15C65) и симулятора (iPhone 15) следующие:
// 打印的内容一样
Original: Hello, World!
Copied: Hello, World!
// 指针本地的地址不一样,说明是不同的指针
Original pointer address: 0x7ff7b1a5fa98
Copied pointer address: 0x7ff7b1a5fa90
// 不同的指针指向同一个对象
Original object address: 0x10e4a0070
Copied object address: 0x10e4a0070
Original: Hello, World!
иCopied: Hello, World!
Выведите содержимое строки.Original pointer address: %p
Выходной указательoriginalString
Сам адрес в стеке.Copied pointer address: %p
Выходной указательcopiedString
Сам адрес в стеке.Original object address: %p
выходoriginalString
Адрес в куче строкового объекта, на который указывает.Copied object address: %p
выходcopiedString
Адрес в куче строкового объекта, на который указывает.Видно, что из-за NSString
является неизменяемым объектом и выполняетcopy
Метод не создает новый объект, а возвращает тот же объект.такoriginalString
иcopiedString
Указывают на один и тот же адрес памяти (адрес объекта тот же), но сами их указатели имеют разные адреса в стеке.
NSString *originalString = @"Hello, World!";
NSString *copiedString = [originalString mutableCopy];
// 打印字符串内容
NSLog(@"Original: %@", originalString); // 输出: Hello, World!
NSLog(@"Copied: %@", copiedString); // 输出: Hello, World!
// 打印指针本身的地址
NSLog(@"Original pointer address: %p", &originalString);
NSLog(@"Copied pointer address: %p", &copiedString);
// 打印指针指向对象的地址
NSLog(@"Original object address: %p", originalString);
NSLog(@"Copied object address: %p", copiedString);
Результаты работы Xcode версии 15.1 (15C65) и симулятора (iPhone 15) следующие:
Original: Hello, World!
Copied: Hello, World!
// 不同的指针
Original pointer address: 0x7ff7be102a98
Copied pointer address: 0x7ff7be102a90
// 指向不同的对象
Original object address: 0x101dfd070
Copied object address: 0x600000c80090