Takie podstawy to ja znam
Zróbmy krótkie case study bo dalej mi coś nie gra.
Mamy taki kod:
Kod:
1. NSString *s1 = [[NSString alloc] initWithUTF8String:"ala"];
2. NSString *s2 = [[NSString alloc] initWithUTF8String:"ola"];
3. NSLog(@"%d %@", [s1 retainCount], s1);
4. [s1 release];
5. NSLog(@"%d %@", [s1 retainCount], s1);
6. s1 = s2;
7. NSLog(@"%d %@", [s1 retainCount], s1);
8. [s1 release];
9. NSLog(@"%d %@", [s2 retainCount], s2);
Po odpaleniu wypisuje on:
Kod:
1 ala
1 ala
1 ola
1 ola
Dlaczego tak ?
Linijka 3. rozumiem, nowo zaalokowana i zainicjowana zmienna ma retainCount równe 1. Ale dlaczego po jej zwolnieniu dalej jest 1 ? Tak samo linijka 7. Ustawiam dwa wskaźniki na String "ola", retainCount = 1, wypisuje się ok, ale jak zwolnię jeden z nich to retainCount zostaje bez zmian. WTF ?