
Napisał
sannindan
@BilboBaggins
Może i dobrze piszesz. Ale zauważ, że ja użyłem takiej składni:
Kod php:
NSString * string = @"cos tam napisane";
A w tym wypadku nie zwalniasz pamięci.
Gwoli scislosci. Przyczepilem sie do konstrukcji Twojego setter'a. To setter nie zwalnia aktualnie przypisanych obiektow, a co za tym idzie prowadzi on do wycieku pamieci. ObjC (jak pewnie doskonale wiesz) nie ma garbage collector'a, a co za tym idzie wymaga od Nas (czyt. programistow) liczenia referencji.
Twoj kod:
Kod php:
-(void) ustawNazwisko: (NSString *) n
{
nazwisko = n;
}
-(void) ustawWiek: (int) w
{
wiek = w;
}
-(void) ustawNazwisko: (NSString *) n iWiek: (int) w
{
nazwisko = n;
wiek = w;
}
W polaczeniu z:
Kod php:
[jozek ustawNazwisko: @"panaNazwisko"];
[jozek ustawWiek: 25];
printf("%s ma %d lat.\n", [[jozek nazwisko] cString], [jozek wiek]);
[jozek ustawNazwisko: @"paniNazwisko" iWiek: 24];
printf("A %s ma %d lat.\n", [[jozek nazwisko] cString], [jozek wiek]);
Zaowocuje tym, ze w momencie nadpisania nazwiska obiektem @"paniNazwisko" obiekt @"panaNazwisko" zostanie dalej w pamieci, pomimo braku referencji do niego. Taka sytuacja bedzie miala miejsce w ObjC 1.0. Jak bedzie w 2.0 tego nie wiem, bo jeszcze zwlekam z czytaniem o garbage collector'ach w ObjC 2.0. Wole w miejsce tego dokonczyc moja aplikacje w PyObjC i opanowac poruszanie sie po API
. Jak to zrobie to sie doedukuje.
No chyba, ze ten kursik wczesniej zahaczy o to zagadnienie
. Dodam, ze bede sledzil Twoj kurs, poniewaz chce sprawdzic siebie i przy okazji sie czegos nowego nauczyc.
Dzieki raz jeszcze za Twoja inicjatywe
. Moje komentarze wynikaja z tego, ze sam wiem ile wysilku kosztowalo mnie opanowanie zarzadzania pamiecia w ObjC 1.0, pomimo dosc dlugiego doswiadczenia w programowaniu. Im wczesniej sie to omowi, tym lepiej
.
PS. W KVC da sie programowac uzywajac wlasnosci klas i accessor'ow. Ja tak koduje caly czas, choc nie ukrywam, ze trzymanie danych w NSMutableDictionary i zarzadzanie nimi przez valueForKey: i setObject:forKey: jest wygodniejsze. Robie tak jak robie, bo tak mi latwiej okielznac wlasny kod
.