+ Odpowiedz na ten temat
Strona 3 z 12 PierwszaPierwsza 1 2 3 4 5 6 7 ... OstatniaOstatnia
Pokaż wyniki od 21 do 30 z 112

Temat: [Kurs] Objective C/Cocoa - 03. Obiekty. Składnia. Typy zmiennych.

  1. #21

    Dołączył
    Jan 2006
    Postów
    63
    Cytat Napisał normanek Zobacz post
    Smuggi, nie wiem, czy cos przegapilem, ale wydaje mi sie (za najnowszym wydaniem "Cocoa Programming in Mac OS X" Pana Aarona Hillegassa), ze settery bez deklaracji rowniez dzialaja (przynajmniej u mnie dzialaly, gdy programowalem uzywajac KVC, a dopiero potem autor przeszedl do deklaracji ;]), natomiast slowo @property sluzy jednoznacznemu wskazaniu, w jaki sposob maja one funkcjonowac (np. copy).
    Nie przegapiles, to dziala bo KVC uzywa metody:
    Kod:
    - (id)valueForKey:(NSString *)key

    Jednak dopiero deklaracja @property pozwala okreslic:
    - jak ma dzialac przypisanie wartosci na te zmienna (assign - jest domyslnie), masz wlasnie copy czy tez retain.. Oprocz tego mozesz ustawic czy to jest zmienna tylko do odczytu, oraz czy jest ona atomic
    - oraz pozwala Ci po prostu na dostep do tej zmiennej w inny sposob niz przez valueForKey (np. przez standardowe settery lub z uzyciem kontrowersyjnej ".")
    Ostatnio edytowane przez Smuggi ; 06.12.2008 o 12:15
    Cytuj Cytuj  


  2. #22

    Dołączył
    Jul 2008
    Postów
    67
    No ta "kontrowersjyna "."", to tylko dlatego jest, że jednak Apple chce się przypodobać za bardzo reszcie programistów z innych języków.
    Ale to wszystko robi się po to aby było "lepiej".
    Chociaż dla mnie przerabianie czegoś, żeby wyglądało jak coś innego, to nie jestdobry pomysł.


    Pozdrawiam.
    私の名前はSannindanです!
    Watashi no namae wa Sannindandesu!
    www.wymarzonydom.com.pl
    Cytuj Cytuj  

  3. #23
    Avatar BilboBaggins
    Dołączył
    Jul 2007
    Skąd
    Częstochowa
    Postów
    397
    Cytat Napisał sannindan Zobacz post
    @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:
    -(voidustawNazwisko: (NSString *) n
    {
        
    nazwisko n;
    }

    -(
    voidustawWiek: (int) w
    {
        
    wiek w;
    }

    -(
    voidustawNazwisko: (NSString *) n iWiek: (int) w
    {
        
    nazwisko n;
        
    wiek w;

    W polaczeniu z:
    Kod php:
        [jozek ustawNazwisko: @"panaNazwisko"];
        [
    jozek ustawWiek25];
        
        
    printf("%s ma %d lat.\n", [[jozek nazwiskocString], [jozek wiek]);
        
        [
    jozek ustawNazwisko: @"paniNazwisko" iWiek24];    
        
    printf("A %s ma %d lat.\n", [[jozek nazwiskocString], [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 .
    Komputer: White MacBook 13,3" Mid 2007 Tomek Wójcik Custom
    Telefon: iPhone 8GB + Nokia E51
    Odtwarzacz: iPod Video 5.5G
    MacBook 13,3", Intel Core 2 Duo 2GHz, 4GB RAM (2x2048 MB Corsair), 250 GB HDD (Seagate Momentus), Combo, Mac OS X 10.5.6

    Da sie w MacBook'u podkrecic procesor?
    Cytuj Cytuj  

  4. #24

    Dołączył
    Jul 2008
    Postów
    67
    Heh.
    Pamiec dla tych napisów jest zawsze zwalniana z końcem programu.
    Jak wiesz to ten zapis, to dokładnie korzystanie z NSConstantString (może i powinienem tego zapisu użyć, ale tak było prościej),
    jest to statyczny obiekt:
    Kod php:
    NSString *str01=@"Napis"; <=> NSConstantString *str01=@"Napis"
    Dlatego też dla potrzeb tej częsci nie było potrzeby używać żadnych AutoRelasePool ani żadnych takich podobnych w setterach. Skoro i tak używałem tylko składni const. No i nie od razu na pierwszą część o zarządzaniu pamieci - to by od razu nie jednego zraziło

    Tak jest z każdą zmienną deklarowaną jako static. Dlatego nie ma mowy o wycieku pamięci ani takich innych sprawach Tym bardziej że wyciek pamięci jest tylko wtedy jeśli stracimi wzkaźnik/referencje do obiektu, ale tylko w przypdaku kiedy nie korzystamy z GC.


    Tu masz małe przypomnienie o zwalanianiu pamieci:
    Kod php:
    NSString *str01 = @"Napis01";
    NSString *str02 = [NSString stringWith*:];      // w miejsce * wstaw cokiolwiek kończące metode np. stringWithString, stringWithCString itp
    NSString *str03 = [[NSString allocinit]; 
    I tak:
    W pierwszym przypadku str01 nie trzeba zwalniać.
    W drugim str02 pamieć jest zwalniana poprzez NSAutoReleasePool.
    Trzeci przypadek, czyli str03 sam zwalniasz poprzez [str03 release];
    No i dochodzi jeszcze GC, ale o tym przy okazji Objective C 2.0


    Pozdrawiam.
    PS.
    Wiem wiem. cString jest deprecated, ale zawsze to przykład i jeszcze tego używają
    Ostatnio edytowane przez genshi.wa ; 06.12.2008 o 15:02
    私の名前はSannindanです!
    Watashi no namae wa Sannindandesu!
    www.wymarzonydom.com.pl
    Cytuj Cytuj  

  5. #25
    Avatar Tojot
    Dołączył
    Feb 2008
    Postów
    693
    nie wchodząc we wszystkie szczegóły, to właściwy kompilator nie dostaje ani pliku .c ani pliku .h ... ani żadnego innego pliku ... a tylko strumień od preprocesora.

    więc jeśli chcemy mówić o tym które pliki są kompilowane ... to żadne pliki nie są kompilowane
    a jeśli chcemy mówić o tym z których plików kod jest kompilowany, to z .m kompilujemy go raz, a z .h wiele razy

    Co do pierwiastka w szkole to sytuacja jest nieco bardziej skomplikowana ... a pierwiastek arytmetyczny z liczb ujemnych naprawdę nie istnieje, a twierdzenie że sqrt(-1)=i jest bardzo poważnym uproszczeniem.
    Komputer: MacBook Pro 15" wer. MacBookPro2,2
    Cytuj Cytuj  

  6. #26

    Dołączył
    Oct 2008
    Postów
    247
    niee no jest ok...


    subiektywne (oczywiscie) rady:
    - jezyk polski w nazewnictwie... brrrr przypomina mi czasy pana bieleckiego i jego "dwumlaski"
    - mysle ze warto ruszyc asap z przykladem "z zycia" ... czyli hallo world z interface builderem. Uczenie sie "z gory na dol" jest przyjemniejsze. Tak ucza sie dzieci i przy okazji sie dobrze bawia... najpierw uzywa duzych drewnianych klockow, a po roku dostaje lego technics :P
    Cytuj Cytuj  

  7. #27

    Dołączył
    Jul 2008
    Postów
    67
    @Tojot
    No tak masz racje. Ale jak się rozejdziemy aż do takich tłumaczeń, to możemy od razu będziemy tłumaczyć co robi kompliator i linker i jak wygląda kod maszynowy
    A tak na poważnie, to zawsze warto wybierać kompromis pomiędzy rzeczami które mamy tłumaczyć dogłębnie a które nie i kiedy to zrobić.

    @giku
    (Jak najbedziej będzie po angielsku -0 już to pisałem wiele razy. Tylko to było na cele 1części o programowaniu aby zrozumieć niektóre rzeczy).


    Proponuję przeczekać, aż do końca kursu
    Potem oceniać. Bo całość lepiej się widzi niż tylko jego część, którą nie stanowi całości.

    Pozdrawiam.
    私の名前はSannindanです!
    Watashi no namae wa Sannindandesu!
    www.wymarzonydom.com.pl
    Cytuj Cytuj  

  8. #28
    MyApple Team Avatar MacDada

    Dołączył
    Feb 2005
    Skąd
    3city
    Postów
    7,194
    Wpisy
    1
    Założenie było takie, że znamy podstawy C. W takim przypadku mnie ten kurs w 100 procentach satysfakcjonuje.

    Dzięki!
    Komputer: MBP
    Telefon: ajfon
    Jazda na motocyklu, to najlepsza rzecz jaką można robić w ubraniu
    Cytuj Cytuj  

  9. #29
    Avatar Brazol
    Dołączył
    Mar 2008
    Skąd
    Stolica
    Postów
    174
    Cytat Napisał Tojot Zobacz post
    a twierdzenie że sqrt(-1)=i jest bardzo poważnym uproszczeniem.
    poważnym uproszczeniem? why?
    Komputer: MacBook Pro 15'' 2,5Ghz 4GB RAM
    Cytuj Cytuj  

  10. #30
    Avatar Tojot
    Dołączył
    Feb 2008
    Postów
    693
    @Brazol: np. dlatego że "i" nie jest jedynym możliwym wynikiem
    ale żeby to właściwie wytłumaczyć to musiałbym wejść w teorię grup, oraz w teorię rozszerzeń algebraicznych ... a to jest materiał na pół semestru ... a że jest to materiał na pół semestru to upraszcza się to do do stwierdzenia sqrt(-1)=i
    Komputer: MacBook Pro 15" wer. MacBookPro2,2
    Cytuj Cytuj  

+ Odpowiedz na ten temat
Strona 3 z 12 PierwszaPierwsza 1 2 3 4 5 6 7 ... OstatniaOstatnia