Teknologian jakaminen

copy ja mutableCopy ovat hieman hämmentäviä

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tee kopio merkkijonoliteraalista

Voit tulostaa osoittimen osoittaman objektin osoitteen ja itse osoittimen osoitteen %p muotoile merkki osoittimen osoitteen tulostamiseksi.Seuraava koodi näyttääoriginalString jacopiedString Osoittimen osoite ja osoite, joka osoittaa objektiin:

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Xcode-version 15.1 (15C65) ja simulaattorin (iPhone 15) juoksutulokset ovat seuraavat:

// 打印的内容一样
Original: Hello, World!
Copied: Hello, World!
// 指针本地的地址不一样,说明是不同的指针
Original pointer address: 0x7ff7b1a5fa98
Copied pointer address: 0x7ff7b1a5fa90
// 不同的指针指向同一个对象
Original object address: 0x10e4a0070
Copied object address: 0x10e4a0070
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

selittää

  • Original: Hello, World! jaCopied: Hello, World! Tulosta merkkijonon sisältö.
  • Original pointer address: %p LähtöosoitinoriginalString Itse osoite pinossa.
  • Copied pointer address: %p LähtöosoitincopiedString Itse osoite pinossa.
  • Original object address: %p ulostulooriginalString Osoite merkkijonoobjektin kasassa, johon osoitti.
  • Copied object address: %p ulostulocopiedString Osoite merkkijonoobjektin kasassa, johon osoitti.

Sen voi nähdä johtuen NSString on muuttumaton objekti ja suorittaacopy Menetelmä ei luo uutta objektia, vaan palauttaa saman objektin.niinoriginalString jacopiedString Osoita samaan muistiosoitteeseen (objektin osoite on sama), mutta niiden osoittimilla itsellään on eri osoitteet pinossa.


Suorita mutableCopy merkkijonoliteraalille

    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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Xcode-version 15.1 (15C65) ja simulaattorin (iPhone 15) juoksutulokset ovat seuraavat:

Original: Hello, World!
Copied: Hello, World!
// 不同的指针
Original pointer address: 0x7ff7be102a98
Copied pointer address: 0x7ff7be102a90
// 指向不同的对象
Original object address: 0x101dfd070
Copied object address: 0x600000c80090
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8