Objective C Vademecum profesjonalisty Wydanie III objcp3

background image
background image

Tytuł oryginału: Programming in Objective-C, Third Edition

Tłumaczenie: Łukasz Piwko

ISBN: 978-83-246-3667-9

Authorized translation from the English language edition, entitled: Programming in Objective-C, Third
Edition, ISBN 0321711394,
by Stephen G. Kochan, published by Pearson Education, Inc,
publishing as Addison Wesley, Copyright © 2011 by Pearson Education, Inc.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording or by any information storage
retrieval system, without permission from Pearson Education Inc.

Polish language edition published by Helion S.A.
Copyright © 2012.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniej¬szej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficz¬ną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte
w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za
ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich.
Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne
szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie?gimpbi
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

Kup książkę

Poleć książkę

Oceń książkę

Księgarnia internetowa

Lubię to! » Nasza społeczność

background image

Spis treci

O

autorze ............................................................................................... 11

O

korektorach merytorycznych .......................................................... 12

Rozdzia 1. Wprowadzenie ...................................................................................... 13

Zawarto ksiki ................................................................................................................14
Struktura ksiki ..................................................................................................................15
Pomoc ..................................................................................................................................17
Podzikowania ....................................................................................................................17

Cz I

Jzyk Objective-C 2.0 .......................................................19

Rozdzia 2. Programowanie w jzyku Objective-C .............................................. 21

Kompilacja i uruchamianie programów ..............................................................................21

Kompilacja programów przy uyciu Xcode ..................................................................22
Kompilacja programów przy uyciu terminala .............................................................28

Objanienie kodu pierwszego programu ..............................................................................30
Wywietlanie wartoci zmiennych ......................................................................................34
Podsumowanie ....................................................................................................................36

Rozdzia 3. Klasy, obiekty i metody ........................................................................ 39

Czym tak waciwie jest obiekt ...........................................................................................39
Egzemplarze i metody .........................................................................................................40
Klasa w jzyku Objective-C do dziaa na uamkach ..........................................................42
Sekcja @interface ................................................................................................................45

Wybór nazw ..................................................................................................................45
Zmienne egzemplarza ...................................................................................................47
Metody klas i egzemplarzy ............................................................................................47

Sekcja @implementation .....................................................................................................49
Sekcja programu ..................................................................................................................50
Zasady dostpu do zmiennych egzemplarzy i hermetyzacja danych ...................................56
Podsumowanie ....................................................................................................................59

Rozdzia 4. Typy danych i wyraenia ..................................................................... 61

Typy danych i stae ..............................................................................................................61

Typ int ...........................................................................................................................61
Typ float ........................................................................................................................62
Typ char ........................................................................................................................62
Kwalifikatory: long, long long, short, unsigned oraz signed .........................................63
Typ id ............................................................................................................................64

Kup książkę

Poleć książkę

background image

6

Objective-C. Vademecum profesjonalisty

Wyraenia arytmetyczne .....................................................................................................65

Kolejno wykonywania dziaa ...................................................................................65
Arytmetyka liczb cakowitych i jednoargumentowy operator minus ............................68
Operator dzielenia modulo ............................................................................................70
Konwersja midzy typami cakowitymi i zmiennoprzecinkowymi ...............................71
Operator rzutowania typów ...........................................................................................72

Operatory przypisania .........................................................................................................73
Klasa kalkulatora .................................................................................................................74

Rozdzia 5. Ptle ....................................................................................................... 79

Ptla for ...............................................................................................................................80

Odbieranie danych z klawiatury ....................................................................................86
Zagniedanie ptli for ..................................................................................................88
Warianty ptli for ..........................................................................................................90

Instrukcja while ...................................................................................................................91
Instrukcja do ........................................................................................................................95
Instrukcja break ...................................................................................................................96
Instrukcja continue ..............................................................................................................97
Podsumowanie ....................................................................................................................97

Rozdzia 6. Podejmowanie decyzji ......................................................................... 99

Instrukcja if .........................................................................................................................99

Instrukcja if-else ..........................................................................................................103
Zoone testy relacyjne ................................................................................................106
Zagniedanie instrukcji if ..........................................................................................108
Konstrukcja else if .......................................................................................................110

Instrukcja switch ................................................................................................................118
Zmienne logiczne ..............................................................................................................121
Operator warunkowy .........................................................................................................126

Rozdzia 7. Klasy raz jeszcze ................................................................................. 129

Pisanie interfejsu i implementacji w osobnych plikach .....................................................129
Automatyczne tworzenie metod dostpowych ..................................................................134
Dostp do waciwoci za pomoc operatora kropki .........................................................135
Metody przyjmujce po kilka argumentów .......................................................................136

Metody bez nazw argumentów ....................................................................................138
Dziaania na uamkach ................................................................................................138

Zmienne lokalne ................................................................................................................141

Argumenty metod ........................................................................................................142
Sowo kluczowe static .................................................................................................142

Sowo kluczowe self ..........................................................................................................145
Alokacja i zwracanie obiektów przez metody ...................................................................146

Rozszerzanie definicji klasy i pliku interfejsowego ....................................................151

Rozdzia 8. Dziedziczenie ...................................................................................... 153

Pocztek wszystkiego ........................................................................................................153

Wybieranie metody do wywoania ..............................................................................157

Rozszerzanie klas poprzez dziedziczenie — dodawanie nowych metod ...........................157

Klasa reprezentujca punkt i alokacja pamici ............................................................161
Dyrektywa @class .......................................................................................................162
Klasy jako waciciele swoich obiektów .....................................................................166

Przesanianie metod ...........................................................................................................169

Wybór metody .............................................................................................................171
Przesanianie metody dealloc i sowa kluczowego super ............................................173

Rozszerzanie poprzez dziedziczenie — dodawanie zmiennych egzemplarzowych ...........175
Klasy abstrakcyjne ............................................................................................................177

Poleć książkę

Kup książkę

background image

Spis treci

7

Rozdzia 9. Polimorfizm oraz typowanie i wizanie dynamiczne ...................... 181

Polimorfizm — ta sama nazwa, róne klasy ......................................................................181
Wizanie dynamiczne i typ id ...........................................................................................184
Sprawdzanie typów ...........................................................................................................186
Typ id i typowanie statyczne .............................................................................................187

Argumenty i typy zwrotne a typowanie dynamiczne ..................................................188

Pytanie o klasy ..................................................................................................................189
Obsuga wyjtków za pomoc instrukcji @try ..................................................................193

Rozdzia 10. Zmienne i typy danych — techniki zaawansowane ....................... 197

Inicjowanie obiektów ........................................................................................................197
Zakres dostpnoci zmiennych — rozszerzenie wiadomoci ............................................200

Dyrektywy do kontroli zakresu dostpnoci zmiennych .............................................200
Zmienne zewntrzne ...................................................................................................201
Zmienne statyczne .......................................................................................................203

Wyliczenia .........................................................................................................................206
Instrukcja typedef ..............................................................................................................209
Konwersja typów ...............................................................................................................210

Reguy konwersji ........................................................................................................210

Operatory bitowe ...............................................................................................................211

Operator bitowego I ....................................................................................................213
Operator bitowego LUB ..............................................................................................214
Bitowy operator LUB wykluczajcego .......................................................................214
Operator uzupenienia jedynkowego ...........................................................................215
Operator przesunicia w lewo .....................................................................................216
Operator przesunicia w prawo ...................................................................................217

Rozdzia 11. Kategorie i protokoy .......................................................................... 219

Kategorie ...........................................................................................................................219

Kilka uwag na temat kategorii .....................................................................................223

Protokoy i delegacja .........................................................................................................224

Delegacja .....................................................................................................................227
Protokoy nieformalne .................................................................................................228

Obiekty zoone .................................................................................................................229

Rozdzia 12. Preprocesor ......................................................................................... 233

Instrukcja #define ..............................................................................................................233

Inne zaawansowane definicje typów ...........................................................................235

Instrukcja #import .............................................................................................................239
Kompilacja warunkowa .....................................................................................................241

Instrukcje #ifdef, #endif, #else oraz #ifndef ................................................................241
Instrukcje #if i #elif .....................................................................................................243
Instrukcja #undef .........................................................................................................244

Rozdzia 13. Dziedzictwo jzyka C ......................................................................... 245

Tablice ...............................................................................................................................245

Inicjowanie elementów tablic ......................................................................................248
Tablice znaków ...........................................................................................................249
Tablice wielowymiarowe ............................................................................................250

Funkcje ..............................................................................................................................251

Argumenty i zmienne lokalne .....................................................................................253
Warto zwrotna funkcji .............................................................................................255
Funkcje, metody i tablice ............................................................................................258

Poleć książkę

Kup książkę

background image

8

Objective-C. Vademecum profesjonalisty

Bloki ..................................................................................................................................259
Struktury ............................................................................................................................263

Inicjowanie struktur ....................................................................................................266
Struktury wewntrz struktur ........................................................................................267
Struktury — uzupenienie wiadomoci .......................................................................268
Nie zapomnij o programowaniu obiektowym! ............................................................271

Wskaniki ..........................................................................................................................271

Wskaniki i struktury ..................................................................................................275
Wskaniki, metody i funkcje .......................................................................................277
Wskaniki i tablice ......................................................................................................278
Dziaania na wskanikach ...........................................................................................288
Wskaniki i adresy w pamici .....................................................................................290

Unie ...................................................................................................................................290
To nie s obiekty! ..............................................................................................................292
Rónoci ............................................................................................................................293

Literay zoone ...........................................................................................................293
Instrukcja goto .............................................................................................................293
Instrukcja pusta ...........................................................................................................294
Operator przecinek ......................................................................................................294
Operator sizeof ............................................................................................................295
Argumenty wiersza polece ........................................................................................296

Jak to dziaa .......................................................................................................................298

Fakt 1. Zmienne egzemplarzowe s przechowywane w strukturach ...............................298
Fakt 2. Zmienna obiektowa jest tak naprawd wskanikiem ...........................................299
Fakt 3. Metody i funkcje oraz wyraenia wysyajce komunikaty i wywoania funkcji ....299
Fakt 4. Typ id to ogólny typ wskanikowy .......................................................................299

Cz II

Biblioteka Foundation ......................................................303

Rozdzia 14. Wprowadzenie do biblioteki Foundation .......................................... 305

Dokumentacja biblioteki Foundation .................................................................................305

Rozdzia 15. Liczby, acuchy i kolekcje ............................................................... 309

Obiekty liczbowe ...............................................................................................................309

Krótka dygresja na temat puli automatycznej .............................................................311

Obiekty acuchowe ..........................................................................................................314

Funkcja NSLog — rozszerzenie wiadomoci ..............................................................315
Metoda description ......................................................................................................315
Obiekty zmienne i niezmienne ....................................................................................316
acuchy zmienne ......................................................................................................322
Gdzie podziewaj si te wszystkie obiekty? ................................................................326

Obiekty tablicowe ..............................................................................................................328

Budowa ksiki adresowej ..........................................................................................331
Sortowanie tablic .........................................................................................................348

Sowniki ............................................................................................................................355

Enumeracja sownika ..................................................................................................356

Zbiory ................................................................................................................................358

Klasa NSIndexSet .......................................................................................................362

Rozdzia 16. Praca z plikami .................................................................................... 367

Praca z plikami i katalogami — klasa NSFileManager .....................................................368

Klasa NSData ..............................................................................................................372
Praca z katalogami ......................................................................................................374
Sprawdzanie zawartoci katalogów .............................................................................376

Poleć książkę

Kup książkę

background image

Spis treci

9

Praca ze ciekami — plik NSPathUtilities.h ....................................................................378

Najczciej uywane metody do pracy ze ciekami do plików ..................................380
Kopiowanie plików i uywanie klasy NSProcessInfo .................................................382

Podstawowe operacje na plikach — klasa NSFileHandle .................................................386
Klasa NSURL ....................................................................................................................390
Klasa NSBundle ................................................................................................................391

Rozdzia 17. Zarzdzanie pamici ....................................................................... 395

Pula automatyczna .............................................................................................................395
Liczenie referencji .............................................................................................................396

Liczenie referencji a acuchy .....................................................................................399
Zmienne egzemplarzowe .............................................................................................401

Przykad automatycznego zwalniania ................................................................................407
Podsumowanie zasad zarzdzania pamici ......................................................................409
Ptla zdarze a alokacja pamici .......................................................................................409
Znajdowanie wycieków pamici .......................................................................................411
Usuwanie nieuytków .......................................................................................................411

Rozdzia 18. Kopiowanie obiektów ......................................................................... 415

Metody copy i mutableCopy .............................................................................................416
Kopiowanie pytkie i gbokie ...........................................................................................418
Implementacja protokou <NSCopying> ...........................................................................420
Kopiowanie obiektów w metodach ustawiajcych i sprawdzajcych ................................423

Rozdzia 19. Archiwizacja ........................................................................................ 427

Listy waciwoci w formacie XML ..................................................................................427
Archiwizacja przy uyciu klasy NSKeyedArchiver ..........................................................429
Pisanie metod kodujcych i dekodujcych ........................................................................431
Tworzenie archiwów przy uyciu klasy NSData ...............................................................438
Kopiowanie obiektów przy uyciu archiwizatora ..............................................................441

Cz III Cocoa, Cocoa Touch i SDK dla systemu iOS ................443

Rozdzia 20. Wprowadzenie do Cocoa i Cocoa Touch ........................................ 445

Warstwy bibliotek .............................................................................................................445
Cocoa Touch .....................................................................................................................446

Rozdzia 21. Pisanie programów dla systemu iOS ................................................. 449

Pakiet SDK dla systemu iOS .............................................................................................449
Pierwszy program dla systemu iOS ...................................................................................449

Tworzenie nowego projektu programu dla iPhone’a ...................................................451
Wpisywanie kodu ........................................................................................................454
Projektowanie interfejsu ..............................................................................................457

Kalkulator uamków ..........................................................................................................463

Tworzenie projektu Fraction_Calculator .....................................................................464
Definicja kontrolera widoku ........................................................................................467
Klasa Fraction .............................................................................................................471
Klasa Calculator z obsug uamków ..........................................................................474
Projekt interfejsu uytkownika ....................................................................................476

Podsumowanie ..................................................................................................................476

Dodatki .................................................................................................479

Dodatek A Sowniczek ........................................................................................... 481

Skorowidz ............................................................................................. 489

Poleć książkę

Kup książkę

background image

Rozdzia 3.

Klasy, obiekty i metody

W tym rozdziale poznasz podstawowe pojcia programowania obiektowego oraz na-
uczysz si podstaw programowania w jzyku Objective-C przy uyciu klas. Konieczne
bdzie przyswojenie terminologii, ale nie bdzie to nic strasznego. Objanienia termi-
nów specjalistycznych s ograniczone do niezbdnego minimum, aby nie przytoczy
Ci nadmiarem informacji. Jeli potrzebujesz dokadniejszych definicji, zajrzyj do do-
datku A, zawierajcego sowniczek poj.

Czym tak waciwie jest obiekt

Obiekt to jaka rzecz. Programowanie obiektowe polega w pewnym sensie na posiada-
niu zbioru takich rzeczy i wykonywaniu na nich rónych operacji. Jest to cakiem od-
mienne podejcie ni w jzyku C, który jest jzykiem proceduralnym. W jzyku C naj-
pierw trzeba si zastanowi, co si chce zrobi, a dopiero potem martwi si o obiekty,
czyli odwrotnie ni w programowaniu obiektowym.

Przestudiujemy przykad z ycia codziennego. Przyjmijmy, e masz samochód, który
oczywicie jest jakim obiektem nalecym do Ciebie. Ten samochód nie jest jakim
tam ogólnie pojazdem, lecz jest konkretnej marki i zosta gdzie wyprodukowany, na
przykad w Detroit, w Japonii albo jeszcze gdzie indziej. Ma on te numer VIN, którym
mona si posugiwa do jego identyfikacji.

W terminologii obiektowej samochód, który posiadasz, nazywa si egzemplarzem
samochodu. Idc tym tropem,

samochód

to klasa, z której utworzono ten egzemplarz.

Zatem kiedy produkowany jest nowy samochód, nastpuje utworzenie kolejnego eg-
zemplarza klasy

samochód

. Kady taki egzemplarz nazywa si obiektem.

Samochód moe by srebrny, mie czarn tapicerk, skadany dach itd. Dodatkowo mona
z nim zrobi róne rzeczy, na przykad prowadzi go, tankowa, my (oby), naprawia
itd. Wszystko to przedstawiono w tabeli 3.1.

Wszystkie czynnoci wymienione w tabeli 3.1 mona wykona z Twoim samochodem,
jak równie z kadym innym. Na przykad Twoja siostra równie prowadzi swój samo-
chód, myje go, tankuje itd.

Poleć książkę

Kup książkę

background image

40

Cz I

‹

Jzyk Objective-C 2.0

Tabela 3.1. Dziaania na obiektach

Obiekt

Dziaania na nim

[Twój samochód]

Prowadzenie

Tankowanie

Mycie

Naprawianie

Egzemplarze i metody

Konkretnym wystpieniem klasy jest egzemplarz, a dziaania, jakie mona na nim wy-
konywa, nazywaj si metodami. Niektóre metody mona wykonywa na rzecz wy-
branych egzemplarzy klasy, a inne take na rzecz samej klasy. Na przykad mycie sa-
mochodu dotyczy konkretnego egzemplarza (w istocie wszystkie czynnoci wymienione
w tabeli 3.1 to metody egzemplarzowe). Natomiast metoda sprawdzajca, ile typów sa-
mochodów dany producent produkuje, miaaby zastosowanie do klasy, a wic byaby
metod klasow.

Przypumy, e mamy dwa samochody, które zeszy z linii produkcyjnej i s identyczne:
oba maj takie same obicie wntrza, ten sam kolor itd. Pocztkowo moe i s takie sa-
me, ale kady z nich ma innego waciciela, dziki czemu zmieniaj si jego waciwo-
ci, czyli cechy. Na przykad jeden samochód moe mie zadrapanie na botniku, a drugi
wicej przejechanych kilometrów. Kady egzemplarz, czyli obiekt, zawiera informacje
nie tylko o swoim stanie pocztkowym, lecz równie o biecych cechach, które mog
si dynamicznie zmienia. Kiedy jedzisz samochodem, z baku ubywa paliwa, na aucie
gromadzi si brud i zuywaj si opony.

Zastosowanie metody do obiektu moe spowodowa zmian jego stanu. Jeli zastosuje
si metod „napenij bak”, to po jej zakoczeniu bak samochodu bdzie peny. Zatem
metoda ta zmieni stan baku samochodu.

Najwaniejsze jest to, e obiekty to konkretne reprezentacje klas. Kady obiekt zawiera
pewne informacje (dane), które s jego prywatn wasnoci. Do sprawdzania i zmie-
niania tych danych su metody.

W jzyku Objective-C do wywoywania metod na rzecz klas i egzemplarzy suy ponisza
skadnia:

[ KlasaLubEgzemplarz metoda ];

Otwiera si nawias kwadratowy, wpisuje nazw klasy lub egzemplarza klasy, przy-
najmniej jedn spacj oraz nazw metody, która ma by wywoana. Na koniec zamyka si
nawias i stawia koczcy instrukcj rednik. Wydanie instrukcji wykonania przez klas
lub obiekt jakiej czynnoci nazywa si wysaniem do klasy lub obiektu komunikatu.
Odbiorca komunikatu to adresat. W zwizku z tym przedstawion powyej skadni
mona take wyrazi w nastpujcy sposób:

[ adresat komunikat ] ;

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

41

Wrócimy do poprzedniej listy i napiszemy wszystko przy uyciu tej nowej skadni.
Zanim jednak to zrobimy, musimy uda si do fabryki po nowy samochód. Suy do
tego nastpujca instrukcja:

yourCar = [Car new]; Tworzenie nowego samochodu

Wysano komunikat

new

do klasy

Car

(adresata komunikatu), aby poprosi j o wydanie

nowego samochodu. W odpowiedzi zostaje utworzony nowy obiekt (reprezentujcy
nasz samochód), który zostaje zapisany w zmiennej

yourCar

. Od tej pory za pomoc

zmiennej

yourCar

mona odwoywa si do naszego nowego samochodu, który otrzy-

malimy z fabryki.

Poniewa aby dosta samochód, udalimy si do fabryki,

new

nazywana jest metod

fabryczn albo klasow. Pozostae czynnoci, które bdziesz wykonywa na swoim
samochodzie, bd metodami egzemplarzowymi, poniewa bd dotyczy Twojego eg-
zemplarza samochodu. Oto kilka przykadowych komunikatów, które mona by napisa
dla samochodu:

[yourCar prep]; Przygotowanie do pierwszego uycia
[yourCar drive]; Prowadzenie samochodu
[yourCar wash]; Mycie samochodu
[yourCar getGas]; Zatankowanie samochodu, jeli jest to konieczne
[yourCar service]; Naprawa samochodu

[yourCar topDown]; Czy samochód jest kabrioletem
[yourCar topUp];
currentMileage = [yourCar odometer];

Ostatni wiersz zawiera przykadow metod egzemplarzow zwracajc informacj —
zapewne przebieg zgodnie ze wskazaniem licznika. Informacja ta w tym przypadku jest
przechowywana w zmiennej o nazwie

currentMileage

.

Oto przykad wywoania metody pobierajcej argument okrelajcy konkretn warto,
która w kadym wywoaniu moe by inna:

[yourCar setSpeed: 55]; Ustawienie prdkoci na 55 mph

Twoja siostra Sue moe uy tych samych metod na rzecz swojego samochodu:

[suesCar drive];
[suesCar wash];
[suesCar getGas];

Moliwo stosowania tych samych metod do rónych obiektów jest jednym z funda-
mentów programowania obiektowego i dlatego póniej jeszcze do tego wrócimy.

Najprawdopodobniej w swoich programach nie spotkasz si jednak z obiektami samo-
chodów. Bd to raczej rzeczy ze wiata komputerów, a wic okna, prostokty, frag-
menty tekstu albo kalkulatory czy listy odtwarzania muzyki. Metody w tych wszystkich
przypadkach mog by podobne do przedstawionych powyej metod dla samochodów,
na przykad:

Poleć książkę

Kup książkę

background image

42

Cz I

‹

Jzyk Objective-C 2.0

[myWindow erase]; Czyci okno
theArea = [myRect area]; Oblicza pole powierzchni prostokta
[userText spellCheck]; Sprawdza pisowni tekstu
[deskCalculator clearEntry]; Usuwa ostatni wpis
[favoritePlaylist showSongs]; Wywietla piosenki z listy ulubionych
[phoneNumber dial]; Wybiera podany numer telefonu
[myTable reloadData]; Wywietla zaktualizowane dane w tabeli
n = [aTouch tapCount]; Wywietla, ile razy stuknito w wywietlacz

Klasa w jzyku Objective-C
do dziaa na uamkach

Czas zbudowa prawdziw klas i nauczy si pracowa z egzemplarzami.

Poniewa najpierw przedstawi sam procedur, przykadowe programy mog wyda-
wa si mao praktyczne. Do bardziej praktycznych rzeczy dojdziemy nieco póniej.

Zaómy, e chcesz napisa program do wykonywania dziaa na uamkach — dziele-
nia, mnoenia, odejmowania itp. Kto, kto nie potrafi tworzy klas, mógby napisa
program podobny do przedstawionego na listingu 3.1:

Listing 3.1.

// Prosty program do wykonywania dziaa na uamkach

#import <Foundation/Foundation.h>

int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int numerator = 1;
int denominator = 3;
NSLog (@"Uamek wynosi %i/%i", numerator, denominator);

[pool drain];
return 0;
}

Listing 3.1 — wynik

Uamek wynosi 1/3

W programie przedstawionym na listingu 3.1 uamki s reprezentowane przy uyciu licz-
nika i mianownika. Znajdujce si za instrukcj tworzc pul automatyczn dwie in-
strukcje definiuj zmienne cakowitoliczbowe

numerator

oraz

denominator

i przypisuj

im wartoci pocztkowe

1

oraz

3

. Kod tych deklaracji mona by równie zapisa tak:

int numerator, denominator;

numerator = 1;
denominator = 3;

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

43

Uamek

1/3

zosta zaprezentowany poprzez zapisanie wartoci

1

w zmiennej

numerator

i

3

w zmiennej

denominator

. Gdyby w programie trzeba byo zapisa du liczb uam-

ków, ta metoda byaby bardzo uciliwa. Kadorazowo, gdy chcielibymy odwoa si
do jakiego uamka, trzeba by byo odwoa si zarówno do jego licznika, jak i mia-
nownika. Równie wykonywanie dziaa byoby do nieporadne.

Znacznie lepiej by byo, gdyby mona byo definiowa uamki jako pojedyncze obiekty
i odwoywa si do ich liczników i mianowników za pomoc jednej nazwy, na przykad

myFraction

. Mona to zrealizowa w jzyku Objective-C, ale potrzebna jest do tego klasa.

Program pokazany na listingu 3.2 robi to samo co program z listingu 3.1, ale przy uy-
ciu nowej klasy o nazwie

Fraction

. Poniej znajduje si jego kod ródowy, a dalej

szczegóowy opis jego dziaania.

Listing 3.2.

// Program do wykonywania dziaa na uamkach — wersja z uyciem klasy

#import <Foundation/Foundation.h>

//---- Sekcja @interface ----

@interface Fraction: NSObject
{
int numerator;
int denominator;
}

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

@end

//---- Sekcja @implementation ----

@implementation Fraction
-(void) print
{
NSLog (@"%i/%i", numerator, denominator);
}

-(void) setNumerator: (int) n
{
numerator = n;
}

-(void) setDenominator: (int) d
{
denominator = d;
}

@end

Poleć książkę

Kup książkę

background image

44

Cz I

‹

Jzyk Objective-C 2.0

//---- Sekcja programu ----

int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;

// Tworzenie egzemplarza klasy Fraction

myFraction = [Fraction alloc];
myFraction = [myFraction init];

// Ustawienie uamka na 1/3

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];

// Wywietlenie uamka przy uyciu metody print

NSLog (@"Warto mojego uamka wynosi:");
[myFraction print];
[myFraction release];

[pool drain];
return 0;
}

Listing 3.2 — wynik

Warto mojego uamka wynosi:
1/3

Zgodnie z komentarzami zamieszczonymi w kodzie ródowym program jest podzielony
na trzy logiczne czci:

„

sekcj

@interface

,

„

sekcj

@implementation

,

„

sekcj programu.

W sekcji

@interface

znajduje si opis klasy oraz jej danych i metod. Natomiast w sekcji

@implementation

zamieszczono kod implementacji tych metod. W sekcji programu

znajduje si kod ródowy wykonujcy zadanie, do którego program zosta stworzony.

Kady program w jzyku Objective-C ma wszystkie te sekcje, chocia nie zawsze
trzeba je wpisywa wasnorcznie. Jak si niebawem przekonasz, zazwyczaj s one
zapisywane w osobnych plikach. Na razie jednak wszystko bdziemy trzyma w jed-
nym pliku.

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

45

Sekcja @interface

Aby zdefiniowa klas, naley wykona kilka czynnoci. Przede wszystkim trzeba
poinformowa kompilator, skd ona pochodzi, tzn. wyznaczy jej klas macierzyst.
Po drugie, naley okreli, jakiego typu dane bd przechowywane w obiektach tej klasy,
a wic opisa dane, które bd przechowywane w skadowych klasy. Skadowe te na-
zywaj si zmiennymi egzemplarza. Na koniec trzeba jeszcze zdefiniowa typy operacji,
czyli metody, których bdzie mona uywa do pracy z obiektami tej klasy. Wszystko
to robi si w specjalnej sekcji programu o nazwie

@interface

. Jej ogólna posta jest na-

stpujca:

@interface NazwaNowejKlasy: NazwaKlasyMacierzystej
{
deklaracjeSkadowych;
}

deklaracjeMetod

;

@end

Tradycyjnie nazwy klas zaczyna si wielk liter, mimo i nie ma takiego formalnego
wymogu. Dziki temu programista czytajcy kod ródowy bez trudu odrónia nazwy
klas od innych rodzajów zmiennych — wystarczy, e spojrzy na pierwsz liter nazwy.
Zrobimy teraz krótk dygresj od gównego tematu i zastanowimy si nad wyborem
nazw w jzyku Objective-C.

Wybór nazw

W rozdziale 2. zostao uytych kilka zmiennych do przechowywania liczb cakowitych.
Na przykad w programie przedstawionym na listingu 2.4 uyto zmiennej o nazwie

sum

do przechowywania wyniku dodawania liczb

50

i

25

.

W jzyku Objective-C w zmiennych mona zapisywa take inne typy danych, pod wa-
runkiem e przed uyciem w programie odpowiednio si te zmienne zadeklaruje. Mo-
na przechowywa liczby zmiennoprzecinkowe, znaki, a nawet obiekty (a mówic do-
kadniej — referencje do obiektów).

Reguy tworzenia nazw s bardzo proste: nazwa musi zaczyna si od litery lub znaku
podkrelenia (

_

), po których moe wystpi dowolna kombinacja wielkich i maych li-

ter, znaków podkrelenia i cyfr. Wszystkie ponisze nazwy s poprawne:

„ sum

,

„ pieceFlag

,

„ i

,

„ myLocation

,

„ numberOfMoves

,

„ sysFlag

,

„ ChessBoard

.

Poleć książkę

Kup książkę

background image

46

Cz I

‹

Jzyk Objective-C 2.0

Natomiast ponisze nazwy s niepoprawne, poniewa s niezgodne z przedstawionymi
wyej zasadami:

„ sum$value

— znaku

$

nie mona uywa w nazwach.

„ piece flag

— w nazwach nie moe by spacji.

„ 3Spencer

— nazwy nie mog si zaczyna od cyfr.

„ int

— to sowo zarezerwowane.

Sowa

int

nie mona uy jako nazwy, poniewa ma ono dla kompilatora specjalne znacze-

nie. Jest to tzw. nazwa zarezerwowana lub sowo zarezerwowane. W jzyku Objective-C
jest wicej takich sów i adnego z nich nie mona uy do nazwania czegokolwiek.

Naley równie pamita, e w jzyku Objective-C rozróniane s wielkie i mae litery.
W zwizku z tym nazwy

sum

,

Sum

i

SUM

dotycz innych zmiennych. Przypomn, e tra-

dycyjnie nazwy klas zaczyna si wielk liter. Natomiast nazwy zmiennych egzempla-
rza, obiektów oraz metod zaczyna si ma. Aby tekst by bardziej czytelny, kade ko-
lejne sowo w nazwie zaczyna si wielk liter, jak w poniszych przykadach:

„ AddressBook

— to moe by nazwa klasy.

„ currentEntry

— to moe by nazwa obiektu.

„ current_entry

— niektórzy wol oddziela wyrazy znakami podkrelenia.

„ addNewEntry

— to moe by nazwa metody.

Dam Ci jedn rad dotyczc wybierania nazw: nie spiesz si. Wybieraj takie nazwy,
które odpowiadaj przeznaczeniu nazywanych elementów. Dobre nazwy — tak jak ko-
mentarze — mog znacznie zwikszy czytelno kodu programu i na pewno je doce-
nisz podczas usuwania bdów i pisania dokumentacji. Tak naprawd pisanie doku-
mentacji bdzie wówczas o wiele atwiejsze, poniewa wielu czci kodu nie trzeba
bdzie nawet objania.

Poniej jeszcze raz przedstawiam kod sekcji

@interface

z listingu 3.2.

//---- Sekcja @interface ----

@interface Fraction: NSObject
{
int numerator;
int denominator;
}

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

@end

Utworzona tu klasa nazywa si

Fraction

, a jej klas macierzyst jest klasa o nazwie

NSObject

(temat klas macierzystych jest rozwinity w rozdziale 8.). Definicja klasy

NSObject

znajduje si w pliku NSObject.h, który jest automatycznie doczany do ka-

dego programu, do którego zaimportowany jest nagówek Foundation.h.

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

47

Zmienne egzemplarza

W sekcji

deklaracjeSkadowych

mieszcz si deklaracje typów danych, jakie bd prze-

chowywane w klasie

Fraction

, oraz ich nazwy. Jak wida, sekcja ta jest zamknita w na-

wiasie klamrowym. Z definicji klasy

Fraction

wynika, e jej obiekt bdzie zawiera

dwie skadowe cakowitoliczbowe o nazwach

numerator

i

denominator

:

int numerator;
int denominator;

Skadowe, których definicje znajduj si w tej sekcji, nazywaj si zmiennymi egzem-
plarza. Jak si niebawem przekonasz, wraz z kadym nowym obiektem tworzony jest nowy
zestaw zmiennych egzemplarza. Jeli zatem zostayby utworzone dwa obiekty o nazwach

fracA

i

fracB

, to kady z nich miaby wasn par tych zmiennych, tzn. zarówno obiekt

fracA

, jak i

fracB

miayby wasne liczniki (

numerator

) i mianowniki (

denominator

).

System jzyka Objective-C pilnuje tego automatycznie, co jest jedn z wielkich zalet
korzystania z obiektów.

Metody klas i egzemplarzy

Aby móc co robi z klas, trzeba zdefiniowa jej metody. Przede wszystkim trzeba
mie moliwo ustawiania wartoci uamka. Jako e nie bdzie bezporedniego dostpu
do wewntrznej reprezentacji licznika i mianownika (innymi sowy, nie bdzie bezpo-
redniego dostpu do zmiennych egzemplarza), trzeba napisa metody, które umoliwi
zmian tych wartoci. Dodatkowo napiszemy te metod o nazwie

print

do drukowania

wartoci uamków. W pliku interfejsu deklaracja tej metody jest nastpujca:

-(void) print;

Znajdujcy si na pierwszym miejscu cznik informuje kompilator Objective-C, e jest
to metoda egzemplarza. Zamiast niego moe te by znak

+

oznaczajcy metod klasy.

Metoda klasy to taka, która wykonuje jakie czynnoci na samej klasie, a wic na przy-
kad tworzy nowy egzemplarz tej klasy.

Metoda egzemplarza dziaa na konkretnym egzemplarzu klasy, na przykad ustawia lub
pobiera jak jego warto, wywietla j itd. Odwoujc si do analogii z samochodem,
po odebraniu samochodu z fabryki mona napeni jego bak paliwem. Czynno ta jest
wykonywana na konkretnym egzemplarzu samochodu, a wic jest odpowiednikiem
metody egzemplarza.

Wartoci zwrotne

Deklarujc metod, trzeba poinformowa kompilator, czy bdzie ona zwracaa jak
warto, a jeli tak, to jakiego typu. Definicj typu zwrotnego wpisuje si w nawiasie za
cznikiem lub znakiem plusa na pocztku definicji metody. Zatem metoda o nazwie

currentAge

, której deklaracj wida poniej, zwraca warto cakowitoliczbow:

-(int) currentAge;

Poleć książkę

Kup książkę

background image

48

Cz I

‹

Jzyk Objective-C 2.0

Natomiast ponisza metoda zwraca liczb o podwójnej precyzji (wicej o tym typie da-
nych dowiesz si w rozdziale 4.).

–(double) retrieveDoubleValue;

Do zwracania wartoci przez metod w jzyku Objective-C suy instrukcja

return

,

a sposób jej uycia jest podobny do zwrotu wartoci z funkcji

main

, z którym mielimy

do czynienia wczeniej.

Jeli metoda nie zwraca adnej wartoci, zaznacza si to sowem

void

:

–(void) print;

Powysza instrukcja to deklaracja metody egzemplarza o nazwie

print

, która nie zwra-

ca adnej wartoci. Na kocu takiej metody nie trzeba wpisywa instrukcji

return

, ale

mona j poda bez adnej wartoci:

return;

Argumenty metod

Oprócz omówionej metody w sekcji

@interface

na listingu 3.2 znajduj si deklaracje

jeszcze dwóch innych metod:

–(void) setNumerator: (int) n;
–(void) setDenominator: (int) d;

adna z nich nie zwraca wartoci. Obie pobieraj argument w postaci liczby cakowitej,
o czym wiadczy sowo

int

w nawiasie przed nazw argumentu. Metoda

setNumerator

ma argument o nazwie

n

. Nazw argumentu wybiera si dowolnie i jest ona uywana

przez metod do odwoywania si do niego. Zatem z deklaracji metody

setNumerator

wyni-

ka, e przyjmuje ona jeden argument wywoania, o nazwie

n

, oraz e nie zwraca adnej

wartoci. Podobnie jest z metod

setDenominator

, z tym e jej argument nazywa si

d

.

Przyjrzyj si uwanie skadni deklaracji tych metod. Po nazwie kadej z nich znajduje si
dwukropek, który oznacza, e wymagaj one argumentu. Dalej w nawiasie znajduje si
deklaracja typu argumentu, co jest podobne do deklaracji typu zwrotnego. Na kocu jest
symboliczna nazwa argumentu suca do jego identyfikacji wewntrz metody. Cao
koczy rednik. Na rysunku 3.1 przedstawiono t skadni w sposób schematyczny.

Rysunek 3.1.
Deklaracja
metody

Jeli metoda przyjmuje argument, naley do jej nazwy docza dwukropek take w od-
woaniach do niej. Zatem poprawnie naleaoby napisa

setNumerator:

i

setDenominator:

,

aby odwoa si do tych pobierajcych po jednym argumencie metod. Natomiast odwoanie
do metody

print

nie ma dwukropka, co oznacza, e nie przyjmuje ona adnego argumentu.

W rozdziale 7. dowiesz si, jak si tworzy metody pobierajce wicej argumentów.

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

49

Sekcja @implementation

W sekcji

@implementation

wpisuje si rzeczywisty kod implementacji metod zadekla-

rowanych w sekcji

@interface

. Jeli chodzi o terminologi, mówi si, e w sekcji

@interface

metody si deklaruje, a w sekcji

@implementation

si je definiuje, tzn. pisze

si ich rzeczywisty kod.

Ogólna skadnia sekcji

@implementation

jest nastpujca:

@implementation NazwaNowejKlasy
definicjeMetod;
@end

W miejsce parametru

NazwaNowejKlasy

naley wpisa t sam nazw co w sekcji

@interface

. Podobnie jak poprzednio, za nazw mona wpisa dwukropek i nazw klasy

macierzystej:

@implementation Fraction: NSObject

Nie jest to jednak obowizkowe i zazwyczaj si tego nie robi.

W czci

definicjeMetod

wpisuje si kod wszystkich metod zadeklarowanych w sek-

cji

@interface

. Podobnie jak poprzednio, definicja kadej metody zaczyna si od

okrelnika jej typu (klasy lub egzemplarza), po którym znajduje si typ zwrotny oraz
argumenty i ich typy. Jednak dalej zamiast rednika naley wpisa kod metody w na-
wiasie klamrowym.

Spójrz na sekcj

@implementation

z listingu 3.2:

//---- Sekcja @implementation ----
@implementation Fraction
-(void) print
{
NSLog (@"%i/%i", numerator, denominator);
}

-(void) setNumerator: (int) n
{
numerator = n;
}

-(void) setDenominator: (int) d
{
denominator = d;
}

@end

Metoda

print

do wywietlania wartoci zmiennych egzemplarza

numerator

i

denomina-

tor

uywa funkcji

NSLog

. Ale do którego licznika i mianownika ta metoda si odnosi?

Do zmiennych, które s wasnoci obiektu bdcego adresatem komunikatu. To bardzo
wane i wkrótce jeszcze do tego wrócimy.

Poleć książkę

Kup książkę

background image

50

Cz I

‹

Jzyk Objective-C 2.0

Metoda

setNumerator:

zapisuje argument, któremu nadalimy nazw

n

, w zmiennej eg-

zemplarza

numerator

. Natomiast metoda

setDenominator:

zapisuje warto argumentu

d

w zmiennej

denominator

.

Sekcja programu

W sekcji programu znajduje si kod ródowy rozwizujcy konkretny problem. W ra-
zie potrzeby moe on by podzielony na wiele plików. Przypomn, e gdzie musi si
znajdowa procedura o nazwie

main

, poniewa od niej zawsze zaczyna si wykonywa-

nie programu. Przypomnijmy sobie jeszcze raz sekcj programu z listingu 3.2:

//---- Sekcja programu ----

int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

Fraction *myFraction;

// Tworzenie egzemplarza klasy Fraction

myFraction = [Fraction alloc];
myFraction = [myFraction init];

// Ustawienie uamka na 1/3

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];

// Wywietlenie uamka przy uyciu metody print

NSLog (@"Warto mojego uamka wynosi:");
[myFraction print];

[myFraction release];
[pool drain];

return 0;
}

Wewntrz funkcji

main

zdefiniowana jest zmienna o nazwie

myFraction

:

Fraction *myFraction;

Powyszy wiersz kodu oznacza, e

myFraction

jest obiektem typu

Fraction

. Innymi

sowy, w

myFraction

bd przechowywane wartoci z klasy

Fraction

. Rola gwiazdki

znajdujcej si przed nazw zmiennej zostaa objaniona troch dalej.

Majc obiekt do przechowywania uamka, trzeba go utworzy, tak jak idzie si do fa-
bryki, aby zoyli nam samochód. Suy do tego poniszy wiersz kodu:

myFraction = [Fraction alloc];

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

51

Sowo

alloc

to skrót od angielskiego sowa

allocate

, czyli alokowa albo przydziela.

Suy ono do rezerwowania w pamici miejsca dla nowego uamka. Ponisze wyraenie
wysya komunikat do nowo utworzonej klasy

Fraction

:

[Fraction alloc]

Wywoujemy na rzecz klasy

Fraction

metod

alloc

, której nigdzie nie zdefiniowalimy.

Skd wic si ona wzia? Zostaa odziedziczona po klasie macierzystej, ale szczegóowo
dziedziczenie jest opisane dopiero w rozdziale 8.

Po wysaniu komunikatu

alloc

do klasy w odpowiedzi otrzymuje si jej nowy egzem-

plarz. W programie przedstawionym na listingu 3.2 zwrócona warto zostaa zapisana
w zmiennej o nazwie

myFraction

. Metoda

alloc

ustawia wartoci wszystkich zmien-

nych egzemplarza na zero, przez co moe on nie by od razu gotowy do uytku. Dlatego
po alokacji obiekt trzeba zainicjowa.

W programie z listingu 3.2 zrobiono to w nastpnym wierszu kodu:

myFraction = [myFraction init];

Tu znowu uywana jest metoda, której nie zdefiniowalimy. Jest to metoda

init

, która

suy do inicjacji egzemplarzy klas. Zwró uwag, e komunikat

init

zosta wysany do

myFraction

, co znaczy, e zainicjowany ma zosta konkretny egzemplarz, a nie klasa.

Postaraj si jak najlepiej zrozumie t rónic, zanim przejdziesz do czytania dalszego
tekstu.

Metoda

init

zwraca warto, któr jest zainicjowany obiekt. Zostaa ona zapisana

w zmiennej typu

Fraction

o nazwie

myFraction

.

Te dwa wiersze kodu suce do alokacji nowego egzemplarza klasy i jego inicjacji s
w jzyku Objective-C tak czsto uywane, e najczciej czy si je w jeden:

myFraction = [[Fraction alloc] init];

Najpierw wykonywane jest wyraenie wewntrzne:

[Fraction alloc]

Jak ju wiesz, jego wynikiem jest alokowany obiekt klasy

Fraction

. Zamiast zapisywa

rezultat alokacji w zmiennej, jak to byo robione wczeniej, od razu zastosowano do
niego metod

init

. Powtórzmy wic: najpierw alokujemy nowy uamek, a potem go

inicjujemy. Nastpnie wynik inicjacji przypisujemy do zmiennej

myFraction

.

Innym czsto stosowanym skrótem jest wczenie alokacji i inicjacji do wiersza dekla-
racji, jak poniej:

Fraction *myFraction = [[Fraction alloc] init];

Tego typu instrukcje bd wielokrotnie uywane w dalszej czci ksiki, a wic ko-
niecznie zapoznaj si z ich dziaaniem. We wszystkich przedstawionych dotychczas
programach dokonywano alokacji puli automatycznej:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

Poleć książkę

Kup książkę

background image

52

Cz I

‹

Jzyk Objective-C 2.0

Tym razem komunikat

alloc

zosta wysany do klasy

NSAutoreleasePool

w celu utwo-

rzenia jej nowego egzemplarza. Nastpnie nowo utworzony obiekt zainicjowano, wy-
syajc do niego komunikat

init

.

Wracajc do programu z listingu 3.2, moemy ju ustawi warto uamka. Robi to
ponisze wiersze kodu:

// Ustawienie uamka na 1/3

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];

Pierwsza instrukcja wysya do obiektu

myFraction

komunikat

setNumerator:

. Jako ar-

gument przekazano warto

1

. Zaraz potem nastpuje przekazanie sterowania do meto-

dy

setNumerator:

zdefiniowanej dla klasy

Fraction

. System Objective-C „wie”, e jest

to metoda z tej klasy, poniewa „wie”, e

myFraction

jest jej obiektem.

W metodzie

setNumerator:

nastpuje zapisanie przekazanej jej wartoci

1

w zmiennej

n

.

Jedyny wiersz kodu skadajcy si na implementacj tej metody zapisuje t warto w zmien-
nej egzemplarza

numerator

. Mówic krótko, zmienna

numerator

zostaa ustawiona na

1

.

Nastpny jest komunikat wywoujcy metod

setDenominator:

na rzecz obiektu

myFraction

. Przekazany do niej argument

3

zostaje przypisany do wewntrznej zmien-

nej

d

. Nastpnie warto ta zostaje zapisana w zmiennej egzemplarza

denominator

i na

tym koczy si proces przypisywania wartoci

1/3

obiektowi

myFraction

. Teraz mona

wywietli warto uamka, do czego su ponisze wiersze z listingu 3.2:

// Wywietlenie uamka przy uyciu metody print

NSLog (@"Warto mojego uamka wynosi:");
[myFraction print];

Funkcja

NSLog

wywietla nastpujcy tekst:

Warto mojego uamka wynosi:

Ponisze wyraenie wywouje metod

print

:

[myFraction print];

Metoda

print

wywietla wartoci zmiennych

numerator

i

denominator

, oddzielajc je

ukonikiem.

Poniszy komunikat zwalnia pami, która bya uywana przez nasz obiekt klasy

Fraction

:

[myFraction release];

Powyszy wiersz to bardzo wany element dobrego stylu programowania. Tworzc
obiekt, zawsze prosisz system o alokowanie dla niego obszaru w pamici. Kiedy ju go
nie uywasz, Twoim obowizkiem jest zwolnienie tej pamici. Oczywicie pami i tak
zostanie zwolniona po zamkniciu programu, ale kiedy zaczniesz pisa bardziej rozbu-
dowane aplikacje uywajce setek albo nawet tysicy obiektów, to bardzo szybko moe
Ci zabrakn pamici, jeli nie bdziesz jej na bieco zwalnia. Czekanie ze zwalnianiem

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

53

pamici na zamknicie programu jest marnotrawstwem tego zasobu, moe spowolni
dziaanie programu oraz stanowi przykad bardzo zego stylu programowania. Dlatego
najlepiej od razu wyrób sobie nawyk zwalniania pamici, kiedy tylko si da.

W systemie wykonawczym Apple wbudowany jest specjalny mechanizm nazywany
systemem usuwania nieuytków (ang. garbage collector), który automatycznie zwal-
nia nieuywan pami. Lepiej jednak umie zarzdza pamici samodzielnie, ni
cakowicie zdawa si na ten algorytm. Na niektórych platformach, takich jak iPhone
i iPad, w ogóle nie jest on obsugiwany. Dlatego opis tego mechanizmu odoymy
na póniej.

Patrzc na kod ródowy programów 3.1 i 3.2, mona spostrzec, e ten drugi jest znacz-
nie duszy, chocia robi to samo co pierwszy. Mimo to podstawowym celem uywania
obiektów jest uatwianie pisania programów, zarzdzania nimi oraz ich rozszerzania.
Stanie si to oczywiste nieco póniej.

Wrómy jeszcze na chwil do deklaracji obiektu

myFraction

:

Fraction *myFraction;

i ustawiania jego wartoci.

Zwró uwag, e Xcode w pierwszym wierszu funkcji

main

, w którym tworzony jest

obiekt

NSAutoreleasePool

, automatycznie wstawia spacj za znakiem

*

. Spacja ta nie

jest potrzebna, a wic tak jak wikszo programistów nie bdziemy jej wstawia.

Gwiazdka znajdujca si przed nazw

myFraction

w deklaracji oznacza, e

myFraction

w rzeczywistoci jest referencj (wskanikiem) do obiektu typu

Fraction

. Zmienna

o tej nazwie tak naprawd nie przechowuje danych uamka (tzn. wartoci jego zmien-
nych

numerator

i

denominator

), lecz referencj do nich — bdc adresem w pamici —

która wskazuje miejsce zapisania obiektu w pamici. Bezporednio po zadeklarowaniu
zmienna

myFraction

nie ma adnej wartoci, poniewa nie zostaa ustawiona ani nie ma

wartoci domylnej. Zmienn

myFraction

mona sobie wyobrazi jako pudeko, w któ-

rym znajduje si warto. Pocztkowo w pudeku znajduje si niezdefiniowana warto,
poniewa nic mu nie przypisano. Pokazano to na rysunku 3.2.

Rysunek 3.2.
Deklaracja Fraction *myFraction;

Kiedy alokowany jest nowy obiekt (na przykad przy uyciu metody

alloc

), nastpuje

zarezerwowanie iloci pamici troch wikszej, ni trzeba do przechowywania jego
zmiennych. Nastpnie metoda

alloc

zwraca informacj o miejscu zapisu tego obiektu

(referencj do danych) i przypisuje j do zmiennej

myFraction

. Wszystko to dzieje

si w wyniku wykonania poniszej instrukcji z programu 3.2:

myFraction = [Fraction alloc];

Alokacj obiektu i zapisanie referencji do niego w zmiennej

myFraction

pokazano na

rysunku 3.3:

Poleć książkę

Kup książkę

background image

54

Cz I

‹

Jzyk Objective-C 2.0

Rysunek 3.3.
Relacje midzy
zmienn myFraction
i jej danymi

Na rysunku nie pokazano wszystkich danych, które s zapisywane wraz z obiektem,
ale na razie nie musisz si tym przejmowa. Zwró uwag, e zmienne egzemplarza
zostay ustawione na

0

, co jest dzieem metody

alloc

. Mimo to obiekt nie jest poprawnie

zainicjowany i trzeba uy metody

init

, aby to zmieni.

Zwró uwag na strzak na powyszym rysunku. Wskazuje ona kierunek poczenia, jakie
zostao wykonane midzy zmienn

myFraction

a alokowanym obiektem (w zmiennej w rze-

czywistoci zapisany jest tylko adres w pamici, pod którym znajduj si dane obiektu).

Póniej nastpuje ustawienie wartoci zmiennych

numerator

i

denominator

. Na rysunku 3.4

pokazano w peni zainicjowany obiekt klasy

Fraction

, którego zmienna

numerator

jest

ustawiona na

1

, a

denominator

na

3

.

Rysunek 3.4.
Ustawienie wartoci
zmiennych numerator
i denominator

W nastpnym przykadzie zobaczysz, jak mona uy wicej ni jednego uamka
w jednym programie. Program przedstawiony na listingu 3.3 warto jednego uamka
ustawia na

2/3

, a drugiego na

3/7

.

Listing 3.3.

// Program do wykonywania dziaa na uamkach — kontynuacja

#import <Foundation/Foundation.h>

//---- Sekcja @interface ----

@interface Fraction: NSObject
{
int numerator;
int denominator;
}

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

@end

//---- Sekcja @implementation ----

@implementation Fraction
-(void) print
{
NSLog (@"%i/%i", numerator, denominator);
}

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

55

-(void) setNumerator: (int) n
{
numerator = n;
}

-(void) setDenominator: (int) d
{
denominator = d;
}

@end

//---- Sekcja programu ----

int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

Fraction *frac1 = [[Fraction alloc] init];
Fraction *frac2 = [[Fraction alloc] init];

// Ustawienie pierwszego uamka na 2/3

[frac1 setNumerator: 2];
[frac1 setDenominator: 3];

// Ustawienie drugiego uamka na 3/7

[frac2 setNumerator: 3];
[frac2 setDenominator: 7];

// Wywietlenie uamków

NSLog (@"Pierwszy uamek:");
[frac1 print];

NSLog (@"Drugi uamek:");
[frac2 print];

[frac1 release];
[frac2 release];

[pool drain];
return 0;
}

Listing 3.3 — wynik

Pierwszy uamek:
2/3
Drugi uamek:
3/7

Poleć książkę

Kup książkę

background image

56

Cz I

‹

Jzyk Objective-C 2.0

Sekcje

@interface

i

@implementation

pozostaj takie same jak w programie 3.2. W treci

programu natomiast zostay utworzone dwa obiekty o nazwach

frac1

i

frac2

, którym

przypisano odpowiednio wartoci

2/3

i

3/7

. Naley podkreli, e wywoanie metody

setNumerator:

na rzecz obiektu

frac1

w celu ustawienia jego licznika na

2

powoduje

ustawienie na t warto zmiennej egzemplarzowej

numerator

wanie obiektu

frac1

.

To samo dotyczy obiektu

frac2

, którego licznik zosta ustawiony na

3

— na warto t

zostaa ustawiona jego prywatna zmienna egzemplarzowa o nazwie

numerator

. Kady nowy

obiekt ma wasny zestaw zmiennych, co przedstawiono schematycznie na rysunku 3.5.

Rysunek 3.5.
Zmienne
egzemplarzy

W zalenoci od tego, który obiekt odbierze komunikat, nastpuje odwoanie do odpo-
wiednich zmiennych egzemplarzowych. W poniszej instrukcji zostanie ustawiona zmienna

numerator

obiektu

frac1

:

[frac1 setNumerator: 2];

Dzieje si tak dlatego, e adresatem komunikatu jest obiekt

frac1

.

Zasady dostpu do zmiennych egzemplarzy
i hermetyzacja danych

W poprzednich przykadach pokazano, jak metody dotyczce uamków ustawiaj war-
toci zmiennych

numerator

i

denominator

, korzystajc bezporednio z ich nazw. W isto-

cie metoda egzemplarza zawsze ma bezporedni dostp do zmiennych egzemplarza.
Natomiast przywileju tego nie maj metody klas, poniewa dotycz one samej klasy,
a nie jej egzemplarzy (zastanów si nad tym przez chwil). Co jednak zrobi, gdyby
trzeba byo uzyska dostp do zmiennych egzemplarza z innego miejsca, na przykad
procedury

main

? Bezporednio si nie da, poniewa zmienne te s ukryte. Ukrywanie

zmiennych w taki sposób jest bardzo wan technik zwan hermetyzacj danych
(ang. data encapsulation). Dziki temu programista piszcy klasy rozszerzajce i mody-
fikujce istniejce klasy nie musi si obawia, e ich uytkownicy bd grzeba w ich
wntrzu. Hermetyzacja danych zapewnia wic izolacj programisty od twórcy klasy.

Nieszkodliwy dostp do zmiennych egzemplarzy mona zapewni poprzez napisanie
specjalnych metod umoliwiajcych odczytywanie i ustawianie ich wartoci. Na przy-
kad do ustawiania wartoci zmiennych

numerator

i

denominator

w klasie

Fraction

na-

pisalimy metody

setNumerator

i

setDenominator

. Aby móc sprawdza te wartoci,

trzeba napisa dwie kolejne metody. Napiszemy na przykad dwie metody o nazwach

numerator

i

denominator

, które bd suyy do sprawdzania wartoci odpowiednio

zmiennych

numerator

i

denominator

obiektu bdcego odbiorc komunikatu. Ich warto-

ci zwrotn bdzie liczba cakowita zapisana w tych zmiennych. Poniej znajduje si
kod deklaracji tych dwóch metod:

–(int) numerator;
–(int) denominator;

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

57

A to s ich definicje:

–(int) numerator
{
return numerator;
}

–(int) denominator
{
return denominator;
}

Zwró uwag, e nazwy tych metod s takie same jak nazwy zmiennych egzemplarza,
których dotycz. Nie ma w tym nic zego (cho dla pocztkujcego moe to dziwnie
wyglda), a wrcz taki jest zwyczaj. Program przedstawiony na listingu 3.4 pozwala
przetestowa obie nowe metody.

Listing 3.4.

// Program do wykonywania dziaa na uamkach — kontynuacja

#import <Foundation/Foundation.h>

//---- Sekcja @interface ----

@interface Fraction: NSObject
{
int numerator;
int denominator;
}

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;

@end

//---- Sekcja @implementation ----

@implementation Fraction
-(void) print
{
NSLog (@"%i/%i", numerator, denominator);
}

-(void) setNumerator: (int) n
{
numerator = n;
}

-(void) setDenominator: (int) d
{
denominator = d;
}

Poleć książkę

Kup książkę

background image

58

Cz I

‹

Jzyk Objective-C 2.0

-(int) numerator
{
return numerator;
}

-(int) denominator
{
return denominator;
}

@end

//---- Sekcja programu ----

int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction = [[Fraction alloc] init];

// Ustawia uamek na 1/3

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];

// Wywietla uamek przy uyciu dwóch nowych metod

NSLog (@"Warto mojego uamka wynosi: %i/%i",
[myFraction numerator], [myFraction denominator]);
[myFraction release];
[pool drain];

return 0;
}

Listing 3.4 — wynik

Warto mojego uamka wynosi: 1/3

Instrukcja wywoujca funkcj

NSLog

wywietla wynik wysania dwóch komunikatów

do obiektu

myFraction

: pierwszy zosta wysany w celu pobrania wartoci zmiennej

numerator

, a drugi —

denominator

:

NSLog (@"Warto mojego uamka wynosi: %i/%i",
[myFraction numerator], [myFraction denominator]);

W pierwszym wywoaniu nastpio wysanie komunikatu

numerator

do obiektu klasy

Fraction

o nazwie

myFraction

. Kod tej metody zwróci warto zmiennej egzemplarza

numerator

tego uamka. Przypomn, e kontekstem wykonywania metody jest obiekt

bdcy adresatem komunikatu. Kiedy zatem metoda

numerator

pobiera i zwraca war-

to zmiennej

numerator

, jest to warto zmiennej o tej nazwie obiektu

myFraction

.

Nastpnie zwrócona liczba cakowita zostaje przekazana do funkcji

NSLog

w celu

wywietlenia.

Poleć książkę

Kup książkę

background image

Rozdzia 3.

‹

Klasy, obiekty i metody

59

W drugim wywoaniu metoda

denominator

pobiera i zwraca warto mianownika obiektu

myFraction

, która nastpnie równie zostaje przekazana do

NSLog

w celu wywietlenia.

Na metody suce do ustawiania wartoci zmiennych egzemplarzowych potocznie
mówi si settery (ang. setter — metoda ustawiajca), natomiast na metody pobierajce
wartoci zmiennych egzemplarzowych — gettery (ang. getter — metoda pobierajca).
W klasie

Fraction

metodami ustawiajcymi s

setNumerator:

i

setDenominator:

, a po-

bierajcymi —

numerator

i

denominator

. Zbiorcza nazwa, jak okrela si zarówno

metody ustawiajce, jak i pobierajce, to metody dostpowe (ang. accessor methods).

Wkrótce poznasz wygodn funkcj jzyka Objective-C 2.0 umoliwiajc automatyczne
tworzenie metod dostpowych.

Umiejtno rozróniania metod pobierajcych i ustawiajcych jest bardzo wana.
Metody ustawiajce nie zwracaj adnej wartoci, poniewa ich zadaniem jest pobiera-
nie argumentów i ustawianie na ich wartoci odpowiednich zmiennych egzemplarza.
W takim przypadku nie ma potrzeby zwracania czegokolwiek. Natomiast zadaniem
metod pobierajcych jest „pobieranie” wartoci zmiennych egzemplarzy zapisanych
w obiektach i przekazywanie ich do programu. Dlatego metody te musz zawiera in-
strukcj

return

suc do zwracania pobranych wartoci zmiennych.

Przypomn jeszcze, e brak moliwoci bezporedniego ustawiania i sprawdzania war-
toci zmiennych egzemplarza w inny sposób ni przy uyciu specjalnie do tego prze-
znaczonych metod dostpowych nazywa si hermetyzacj danych. Aby uzyska dostp
do danych, które inaczej s ukryte przed „wiatem zewntrznym”, trzeba uy spe-
cjalnych metod. W ten sposób tworzy si scentralizowany punkt dostpowy do danych
i uniemoliwia zmian ich w aden inny sposób, co sprawia, e atwiej jest zrozumie
kod programów, a take go modyfikowa i oczyszcza z bdów.

Naley jeszcze doda, e istnieje take metoda

new

, która czy w sobie funkcjonalno

metod

alloc

i

init

. Mona na przykad alokowa i zainicjowa obiekt klasy

Fraction

za pomoc nastpujcego wiersza kodu:

Fraction *myFraction = [Fraction new];

Ogólnie rzecz biorc, lepiej jest jednak korzysta z dwuetapowego procesu alokacji
i inicjacji, poniewa dokadnie wiadomo, e wykonywane s dwie czynnoci: utworzenie
obiektu i jego inicjacja.

Podsumowanie

Potrafisz ju zdefiniowa wasn klas, tworzy jej obiekty, czyli egzemplarze, oraz
wysya do nich komunikaty. Do klasy

Fraction

wrócimy jeszcze w dalszej czci

ksiki. Dowiesz si, jak przekazywa do metod po kilka argumentów, jak dzieli defi-
nicje klas na kilka plików oraz jak zrobi uytek z takich podstawowych technik, jak
dziedziczenie i wizanie dynamiczne. Na razie jednak musisz zdoby nieco wicej wia-
domoci o typach danych i pisaniu wyrae w jzyku Objective-C. Zanim przejdziesz
do kolejnego rozdziau, sprawd swoj wiedz, wykonujc poniszy zestaw wicze.

Poleć książkę

Kup książkę

background image

60

Cz I

‹

Jzyk Objective-C 2.0

wiczenia

1.

Które z poniszych nazw s niepoprawne? Uzasadnij.

Int playNextSong 6_05
_calloc Xx alphaBetaRoutine
clearScreen _1312 z
ReInitialize _ A$

2.

Przypomnij sobie przykad z samochodem, przytoczony w tym rozdziale, i pomyl
o jakim obiekcie, którego uywasz na co dzie. Wymyl dla niego klas i napisz
pi czynnoci, które mona z nim wykona.

3.

Przepisz list czynnoci z punktu 2. przy uyciu poniszej skadni:

[egzemplarz metoda];

4.

Wyobra sobie, e oprócz samochodu masz ód i motocykl. Sporzd list
czynnoci, jakie mona wykona z kadym z tych sprztów. Czy niektóre z nich
si powtarzaj?

5.

Odnoszc si do punktu 4., wyobra sobie, e masz klas o nazwie

Pojazd

i obiekt o nazwie

mojPojazd

, który moe by typu

Samochod

,

Motocykl

lub

Lodz

.

Przypumy, e piszesz poniszy kod:

[mojPojazd przygotuj];
[mojPojazd zatankuj];
[mojPojazd napraw];

Czy widzisz jakie korzyci z tego, e moesz zastosowa t sam czynno
do obiektu, który moe nalee do jednej z kilku klas?

6.

Korzystajc z takiego proceduralnego jzyka programowania jak C, najpierw
wymyla si potencjalne czynnoci, a potem pisze kod wykonujcy je na rónych
obiektach. Mona by byo na przykad napisa procedur mycia pojazdu, a nastpnie
w jej wntrzu napisa kod do mycia samochodu, odzi, motocykla itd. Przypumy,
e po jakim czasie musisz doda nowy typ pojazdu (zobacz poprzednie wiczenie).
Czy dostrzegasz jakie wady lub zalety zastosowania takiego proceduralnego
podejcia w stosunku do obiektowego?

7.

Zdefiniuj klas o nazwie

PunktXY

do przechowywania wspórzdnych

kartezjaskiego ukadu wspórzdnych, gdzie

x

i

y

s liczbami cakowitymi.

Zdefiniuj metody ustawiajce i pobierajce warto kadej ze wspórzdnych
osobno. Nastpnie napisz program w jzyku Objective-C implementujcy t klas
i j przetestuj.

Poleć książkę

Kup książkę

background image

Skorowidz

#define, instrukcja, 233, 234, 235, 236
#elif, instrukcja, 241, 243
#else, instrukcja, 241
#endif, instrukcja, 241
#if, instrukcja, 243
#ifdef, instrukcja, 241
#ifndef, instrukcja, 241, 242
#import, instrukcja, 32, 239, 240
#undef, instrukcja, 244
@catch, 194, 195
@class, dyrektywa, 162
@end, 225
@finally, 194
@implementation, sekcja, 44, 49
@interface, sekcja, 44, 45
@optional, dyrektywa, 226, 229
@package, dyrektywa, 200
@private, dyrektywa, 200, 455
@property, dyrektywa, 134
@protected, dyrektywa, 200
@protocol, dyrektywa, 225
@public, dyrektywa, 200, 201
@required, dyrektywa, 226
@selector, dyrektywa, 190
@throw, 195
@try, instrukcja, 193, 194
__block, modyfikator, 259
<NSCopying>, protokó

implementacja, 420, 421

<NSMutableCopying>, protokó, 416

A

abstrakcyjne, klasy, 177
accessor methods, Patrz metody dostpowe
addObject, metoda, 331, 360
addSubview, metoda, 399
adresowania, operator, 272, 273
adresowanie porednie, 272
allKeys, metoda, 357
alloc, metoda, 51, 53, 204, 411

alokacja, 51, 161

metody, 411

alokowanie pamici, 51
aplikacja rodzima, 14
AppDelegate, klasa, 464
appendString, metoda, 324
AppKit, 446
application bundle, Patrz pakiety programów
Application Kit, 305
Application Services, Patrz usugi programów
applicationDidFinishLaunchingWithOptions,

metoda, 456

archiveRootObject:toFile, metoda, 429
archiwizacja, 427

przy uyciu klasy NSKeyedArchiver, 429
z kluczami, 429

argc, 296
arguments, metoda, 384
argumenty metod, 142
argv, 296
array, metoda, 331
arrayWithContentsOfFile, metoda, 428
arrayWithContentsOfURL, metoda, 391
arrayWithObjects, metoda, 329
arytmetyczne, wyraenia, 65
atomic, sowo kluczowe, 424
attributesOfItemAtPath:error, metoda, 372
attributesOfItemAtPath:traverseLink, metoda, 369
automatyczne zmienne lokalne, 254
autorelease pool, Patrz pula pamici zwalnianej

automatycznie

autorelease, komunikat, 409
autorelease, metoda, 405

B

bezwzgldne, cieki, 368
biblioteka, 15, 305
bitowe, operatory, 211, 212, 213, 214, 215, 216, 217
bloki, 259, 260, 262
bdy krytyczne, 27

Poleć książkę

Kup książkę

background image

490

Objective-C. Vademecum profesjonalisty

BOOL, typ danych, 125
break, instrukcja, 96
bufor, 372

niezmienny, 372
zmienny, 372

C

C, jzyk, 13, 14
Caches, katalog, 382
caseInsensitiveCompare, metoda, 318
categories, Patrz kategorie
CGFloat, 267
CGGeometry.h, 267
CGPoint, 267
CGRect, 267
CGRectMake, 268
CGSize, 267
CGSizeMake, 268
char, typ danych, 61, 62
class, metoda, 189
Cocoa, 13, 305, 409, 445, 446, 447
Cocoa Touch, 305, 445, 446, 447
compare, metoda, 313, 318
conformsTo, metoda, 226
containsObject, metoda, 347
contentsOfDirectoryAtPath:error, metoda, 376
continue, instrukcja, 97
copy, atrybut, 337
copy, metoda, 416, 419
copyItemAtPath:error, metoda, 371
copyWithZone, metoda, 421, 422
Core Services, Patrz usugi systemu
countForObject, metoda, 360
Cox, Brad J., 13
currentDirectoryPath, metoda, 380

D

dane, hermetyzacja, 56
data encapsulation, Patrz hermetyzacja danych
dataWithContentsOfFile, metoda, 428
dealloc, komunikat, 397, 409
dealloc, metoda, 173
dealokacja, 397
decodeObject:forKey, metoda, 432
decyzje, podejmowanie, 99
defaultManager, komunikat, 369
dekrementacji, operator, 85, 280, 285, 286
delegacja, 227
deleteCharactersInRange, metoda, 324, 325
description, metoda, 315
dictionaryWithContentsOfURL, metoda, 391
dispatch table, Patrz tablice rozdziau

do, instrukcja, 95
dostpowe metody, 59, 134
double, typ danych, 61
dynamiczne typowanie, 181, 188, 189
dziaania

kolejno, 65, 67
na wskanikach, 288

dziedziczenie, 153, 157, 175

zmiennych egzemplarzowych i metod, 155

dzielenia modulo, operator, 70

E

egzemplarz, 39
egzemplarzowe, zmienne, 401
else if, konstrukcja, 110
encodeObject:forKey, metoda, 432, 433, 436
encodeWithCoder, metoda, 431
enum, sowo kluczowe, 206
enumeratorAtPath, metoda, 376
etykiety, 293, 294
extern, sowo kluczowe, 201, 202, 203

F

fast enumeration, Patrz szybka enumeracja
fatal error, Patrz bdy krytyczne
fileHandleForUpdatingAtPath, metoda, 387
fileHandleForWritingAtPath, metoda, 387
finishDecoding, komunikat, 439
finishEncoding, komunikat, 439
float, typ danych, 61, 62
for, 80, 81, 83, 84

warianty, 90
zagniedanie, 88

forwardInvocation, metoda, 191
Foundation, biblioteka, 305, 309

dokumentacja, 305
tablice, 328
zwalnianie obiektów, 311

Foundation.h, 309
framework, Patrz biblioteka
funkcja znaku, 110
funkcje, 251, 252, 257, 258

argumenty, 253, 256
prototyp, 256, 257
przekazywanie tablic, 258
warto zwrotna, 255, 256
wskaniki, 277, 288
zewntrzne, 258
zmienne lokalne, 253, 254

Poleć książkę

Kup książkę

background image

Skorowidz

491

G

garbage collector, Patrz system usuwania nieuytków
gcc, kompilator, 29
gettery, 59
globalne zmienne, 201
goto, instrukcja, 293

H

hermetyzacja danych, 56

I

I, operator, 213
IBAction, 456
IBOutlet, identyfikator, 455
id, typ danych, 64, 184, 187, 299
if, instrukcja, 99

zagniedanie, 108

if-else, instrukcja, 103, 105
implementacyjny, plik, 133
indeks, 246
indexOfObject, metoda, 347
indexOfObjectPassingTest, metoda, 362, 363
indirection, Patrz adresowanie porednie
inicjatory, 198

desygnowane, 198

init, metoda, 51
initForWritingWithMutableData, komunikat, 439
initWith, przedrostek, 312
initWithCoder, metoda, 431, 432, 433
inkrementacji, operator, 85, 280, 285, 286
insertString:atIndex, metoda, 324
instrukcje, 32, 33
int, typ danych, 61
interfejsowy, plik, 132, 133
intersection, metoda, 360
iOS

czsto uywane katalogi, 382
pakiet SDK, 449
pisanie programów, 449

iPhone

projektowanie interfejsu, 457
symulator, 451
szablony programów, 452
tworzenie nowego projektu, 451

isa, 298
isEqualToNumber, metoda, 313
isEqualToSet, metoda, 360
isEqualToString, metoda, 318
isKindOf, metoda, 192
isMemberOfClass, metoda, 192

J

jdro, 445

K

katalog gówny, 368
katalogi

praca, 374
sprawdzanie zawartoci, 376
systemu iOS, 382

kategorie, 160, 219, 223, 224
klasa, 39, 153, 154

abstrakcyjna, 177
do dziaa na uamkach, 42
dziedziczenie, 157
gówna, 153
konkretna, 177
macierzysta, 45
metody, 45, 47
nadrzdna, 153
nazwy, 45, 46
potomna, 153
rozszerzanie definicji, 151
rozszerzanie przez dziedziczenie, 157
zapis w osobnych plikach, 129
zmienne egzemplarza, 45

klaster, 177
klawiatura, odbieranie danych, 86
komentarze, 26, 31
kompilacja, 21

bdy krytyczne, 27
ostrzeenia, 27
przy uyciu Xcode, 22, 26, 28
terminal, 28
warunkowa, 241, 242

komunikat, 40
konwersja typów, 71, 210

reguy, 210

kopiowanie

gbokie, 418, 419
obiektów, 415
plików, 382
pytkie, 418, 419
przy uyciu archiwizatora, 441
w metodach ustawiajcych i sprawdzajcych, 423

kropki, operator, 135
kwalifikatory, 63

long, 63
long long, 63
short, 63, 64
signed, 63
unsigned, 63

Poleć książkę

Kup książkę

background image

492

Objective-C. Vademecum profesjonalisty

L

lastPathComponent, metoda, 380
length, metoda, 318
liczba trójktna, 79
liczenie referencji, 396

acuchy, 399

listy waciwoci, 427
literay zoone, 293
logiczne, zmienne, 121, 123, 125
lokalizacja, 314
lokalne zmienne, 141, 142, 253, 254

automatyczne, 254
statyczne, 254

long, 63
long long, 63
lowercaseString, metoda, 318
LUB wykluczajcego, operator, 214
LUB, operator, 214

acuchy formatujce, 36
acuchy znaków, 249, 284

wskaniki, 282, 284

czno, 65

M

M_PI, 234
main, 252
mainBundle, metoda, 392
makra, 238
metody, 40, 45, 258

argumenty, 48, 142
bez nazw argumentów, 138
dekodujce, 431
dostpowe, 59, 134
egzemplarzy, 47
klas, 47
kodujce, 431
pobierajce, 59, 134
przekazywanie tablic, 258
przesanianie, 169, 173
przyjmujce po kilka argumentów, 136
ustawiajce, 59, 134
wartoci zwrotne, 47
wskaniki, 277
wywoywanie, 40, 41
zwracanie obiektów, 146

minus, operator, 68
modu, 200
moveItemAtPath:toPath, metoda, 372
moveItemAtPath:toPath:error, metoda, 371

mutableCopy, metoda, 416, 419
mutableCopyWithZone, metoda, 421
muteks, 424
mutex, Patrz muteks

N

nadklasa, 153, 154

abstrakcyjna, 177

nagówki prekompilowane, 309
nagówkowe pliki, 240
NAN, 101
nazwy

niepoprawne, 46
poprawne, 45
tworzenie, 45, 46
zarezerwowane, 46

nieuytki, usuwanie, 411
nonatomic, atrybut, 337
nonatomic, sowo kluczowe, 424
notacja

naukowa, 62
sigma, 149

NSArchiver, klasa, 429
NSArray, klasa, 198, 328

metody, 352, 353

NSBundle, klasa, 367, 391
NSCalendarDate, klasa, 271
NSCopying, protokó, 225
NSCountedSet, klasa, 360
NSData, klasa, 372

tworzenie archiwów, 438

NSDate, klasa, 271
NSDictionary, klasa, 357

metody, 357

NSFileHandle, klasa, 367, 386, 387

metody, 386

NSFileManager, klasa, 367, 368

metody, 369, 374

NSFileSize, 370
NSHomeDirectory, funkcja, 380
NSHomeDirectoryForUser, funkcja, 380
NSIndexSet, klasa, 362

metody, 364

NSKeyedArchiver, klasa, 429
NSKeyedUnarchiver, klasa, 433, 439
NSLog, funkcja, 32, 34, 35, 65, 315, 331
NSMutableArray, klasa, 328

metody, 353

NSMutableData, klasa, 372
NSMutableDictionary, klasa, 357

metody, 358

NSMutableSet, klasa, 361

metody, 361

Poleć książkę

Kup książkę

background image

Skorowidz

493

NSMutableString, klasa, 316, 322

metody, 328

NSNumber, klasa, 177, 313

metody, 312

NSObject, klasa, 153

metody, 189

NSObject.h, 313
NSOrderAscending, 313, 318
NSOrderDescending, 313, 318
NSOrderedSame, 313, 318
NSPathUtilities.h, 378
NSProcessInfo, klasa, 382, 384

metody, 385

NSPropertyListSerialization, klasa, 429
NSRange, typ danych, 320
NSSearchPathForDirectoriesInDomains, funkcja,

381, 382

NSSet, klasa, 361

metody, 361

NSString, klasa, 32, 62, 314, 316, 326

metody, 326, 327

NSTemporaryDirectory, funkcja, 379
NSURL, klasa, 367, 390
NSValue, klasa, 353, 354

metody, 354

null statement, Patrz pusta instrukcja
numberWithInt, metoda, 313, 314
numberWithInteger, metoda, 313, 314
NWD, algorytm, 92

O

obiekty, 39, 40

identyczne, 346
inicjowanie, 197
kopiowanie, 415, 423, 441
liczbowe, 309
acuchowe, 314
niezmienne, 316, 319
stan, 40
tablicowe, 328
zoone, 229
zmienne, 316

objectAtIndex, metoda, 329
objectForKey, metoda, 356
Objective-C, jzyk, 13
obsuga wyjtków, 193
odpakowywanie, 354
opakowywanie, 354
operacje bitowe, 212
operatory

adresowania, 272, 273
bitowe, 211, 212, 213, 214, 215, 216, 217
dekrementacji, 85, 280, 285, 286
dwuargumentowe, 65

dzielenia modulo, 70
I, 213
inkrementacji, 85, 280, 285, 286
jednoargumentowe, 69
kropki, 135
LUB, 214
LUB wykluczajcego, 214
czno, 65
minus, 68
porównania, 106
priorytet, 65
przecinek, 294
przesunicia w lewo, 216, 217
przesunicia w prawo, 217
przypisania, 73, 74
relacyjne, 82
rzutowania typów, 72, 73
sizeof, 295, 296
trójargumentowe, 126
uzupenienia jedynkowego, 215
warunkowe, 126, 127
wskanikowy struktur, 276

ostrzeenia, 27
outlet, 454
override, Patrz przesanianie

P

pakiety programów, 367, 391
pami

adresy, 290
przydzielanie, 51
wycieki, 148, 411
zarzdzanie, 395, 409
zwalnianie, 52, 53

pathComponents, metoda, 380
pathExtension, metoda, 380
pathForResource:ofType, metoda, 392
pathsOfResourcesOfType:inDirectory, metoda, 392
performSelector, metoda, 190
ptle, 79

do, 95
for, 80, 81, 83, 84, 88, 90
while, 91, 92

piaskownica, 375
pliki

doczane, 240
implementacyjne, 133
importowanie, 133
interfejsowe, 132, 133
kopiowanie, 382
nagówkowe, 240
podstawowe operacje, 386
praca, 367, 368
rozszerzenia, 25

Poleć książkę

Kup książkę

background image

494

Objective-C. Vademecum profesjonalisty

pobierajce metody, 59, 134
podklasa, 153, 154
pola bitowe, 269, 270, 271
polimorfizm, 181, 184
porównania, operator, 106
postdekrementacja, 285
postinkrementacja, 285, 286
predekrementacja, 285
preinkrementacja, 285, 286
prekompilowane nagówki, 309
preprocesor, 233, 237
programowanie

obiektowe, 39
proceduralne, 39

programu, sekcja, 50
protokó, 224, 225, 226, 227

abstrakcyjny, 228
bezklasowy, 226
definiowanie, 225
formalny, 228
nieformalny, 228

przecinek, operator, 294
przesanianie, 169, 173
przestrzenie nazw, 224
przesunicia w lewo, operator, 216, 217
przesunicia w prawo, operator, 217
przydzielanie pamici, 51
przypisania, operatory, 73, 74
pula automatyczna, 311, 334, 395, 396, 405, 409
pula pamici zwalnianej automatycznie, 32
pusta instrukcja, 294

Q

qsort, funkcja, 289

R

rangeOfString, metoda, 321, 325
readDataOfLength, metoda, 388
readDataToEndOfFile, metoda, 388
reference counting, Patrz liczenie referencji
referencje, 53

liczenie, 396

relacyjne, operatory, 82
release, komunikat, 397, 409
release, metoda, 173, 409
removeItemAtPath, metoda, 369
removeObject, metoda, 360
replaceCharacterInRange:withString, metoda, 325
respondsToSelector, metoda, 191, 228
retain, metoda, 396, 399, 409
return, instrukcja, 48, 255
Ritchie, Dennis, 13
rodzima aplikacja, 14

root class, Patrz klasa gówna
root directory, Patrz katalog gówny
rzutowanie, 72

S

sandbox, Patrz piaskownica
scanf, 86, 87, 113
seekToEndOfFile, metoda, 390
sekcje

@implementation, 44, 49
@interface, 44, 45
programu, 50

self, sowo kluczowe, 145, 146
setObject:forKey, metoda, 356
setString, metoda, 325
settery, 59
setWithObjects, metoda, 360
short, 63, 64
sigma, notacja, 149
signed, 63
sizeof, operator, 295, 296
skipDescendents, komunikat, 376
sownik atrybutów, 369, 370
sowniki, 355

enumeracja, 356
niezmienne, 355
zmienne, 355

sowo zarezerwowane, 46
sortowanie szybkie, 289
sortUsingSelector, metoda, 349
staa, 61
static, sowo kluczowe, 142, 254
statyczne typowanie, 187
statyczne zmienne, 203
statyczne zmienne lokalne, 254
sterowniki urzdze, 445
stringByAppendingPathComponent, metoda, 380
stringByAppendingString, metoda, 318
stringByExpandingTildeInPath, metoda, 380
stringByStandardizingPath, metoda, 380
stringWithContentsOfFile, metoda, 428
stringWithFormat, metoda, 316
struct, sowo kluczowe, 291
struktury, 263, 265, 268

inicjowanie, 266
wewntrz struktur, 267
wskaniki, 275, 276

substringFromIndex, metoda, 321
substringToIndex, metoda, 321
super, sowo kluczowe, 173, 174
switch, instrukcja, 118, 119, 121
symulator iPhone'a, 451
system usuwania nieuytków, 53, 412
szybka enumeracja, 330, 341

Poleć książkę

Kup książkę

background image

Skorowidz

495

cieki, 368

bezwzgldne, 368
najczciej uywane funkcje, 381
najczciej uywane metody, 380, 381
praca, 378
wzgldne, 368

rodowisko z pamici zarzdzan, 411

T

tablice, 245, 246, 247, 258, 328

dwuwymiarowe, 250, 251
inicjowanie elementów, 248
niezmienne, 328
rozdziau, 289
wielowymiarowe, 250
wskaniki, 278, 279
zmienne, 328
znaków, 249

terminal, kompilacja, 28
traverseLink, parametr, 369
trójktna liczba, 79
typedef, instrukcja, 197, 209
typowanie

dynamiczne, 181, 188, 189
statyczne, 187

typy danych, 61, 65

BOOL, 125
char, 61, 62
double, 61
float, 61, 62
id, 64, 184, 187, 299
int, 61
konwersja, 71, 210
kwalifikatory, 63
metody do kodowania i dekodowania, 432
NSRange, 320
rzutowanie, 72
sprawdzanie, 186
wyliczeniowy, 197
zakres, 62

U

UIKit, 447
UILabel, klasa, 455
UITableView, klasa, 227, 228
UITableViewDataSource, protokó, 227
UITableViewDelegate, protokó, 228
UIViewController, klasa, 465
UIWindow, klasa, 455
unichar, 314

unie, 290, 291
union, metoda, 360
union, sowo kluczowe, 291
unsigned, 63
unwrapping, Patrz odpakowywanie
uppercaseString, metoda, 318
URLWithString, metoda, 390
usugi programów, 446
usugi systemu, 445
ustawiajce metody, 59, 134
uzupenienia jedynkowego, operator, 215

V

void, 48, 252

W

wartoci zmiennoprzecinkowe, 35
warto staa, 61
warto zwrotna, 47, 255

typ, 256

warunkowa kompilacja, 241, 242
warunkowe wyraenie, 126
warunkowy, operator, 126, 127
wejcie standardowe, 294
while, instrukcja, 91, 92
wizanie dynamiczne, 176, 181, 184
widoki, 399
wiersz polece, argumenty, 296
wrapping, Patrz opakowywanie
writeToFile:atomically, metoda, 427, 439
wskaniki, 53, 271, 272, 273, 275

adresy w pamici, 290
dziaania, 288
metody i funkcje, 277
na funkcje, 288
na acuchy znaków, 282, 284
na struktury, 275, 276
na tablice, 278, 279
operatory inkrementacji i dekrementacji, 280

wskanikowy struktur, operator, 276
wycieki pamici, 148, 411
wyjtki, 193

obsuga, 193

wyliczenia, 206, 208, 209
wyliczeniowy, typ danych, 197
wyraenia

arytmetyczne, 65
stae, 61
warunkowe, 126

wyrównanie do prawej, 86
wzgldne, cieki, 368

Poleć książkę

Kup książkę

background image

496

Objective-C. Vademecum profesjonalisty

X

Xcode, 21, 22, 28

kompilacja, 22, 26, 28
korzystanie z dokumentacji, 306
tworzenie nowego projektu, 22, 23, 24
tworzenie nowej klasy, 130, 131
uruchomienie programu, 26
znajdowanie wycieków pamici, 411

XML, listy waciwoci, 427

Z

zarzdzanie pamici, 395, 409
zbiory, 358
zewntrzne zmienne, 201, 202
zoone testy relacyjne, 106
zmienne

egzemplarza, 45, 47, 401
globalne, 201
indeksowe, 83
logiczne, 121, 123, 125
lokalne, 90, 141, 142, 253, 254
outlet, 454
statyczne, 203
wywietlanie wartoci, 34
zakres dostpnoci, 200
zewntrzne, 201, 202

zmiennoprzecinkowe wartoci, 35
znak nowego wiersza, 34
znaku, funkcja, 110

Poleć książkę

Kup książkę

background image
background image

Wyszukiwarka

Podobne podstrony:
Objective C Vademecum profesjonalisty Wydanie III objcp3 2
Objective C Vademecum profesjonalisty Wydanie III 2
Objective C Vademecum profesjonalisty Wydanie III
informatyka objective c vademecum profesjonalisty wydanie iii stephen g kochan ebook
Objective C Vademecum profesjonalisty Wydanie III
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie czwarte phmsv4
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie
J2EE Vademecum profesjonalisty Wydanie II
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie 2
J2EE Vademecum profesjonalisty Wydanie II j2evp2
J2EE Vademecum profesjonalisty Wydanie II 2
J2EE Vademecum profesjonalisty Wydanie II 2
J2EE Vademecum profesjonalisty Wydanie II
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie phmsv3
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie

więcej podobnych podstron