E-book details

Objective-C. Podstawy

Objective-C. Podstawy

Johannes Fahrenkrug, Collin Ruffenach, Christopher Fairbairn

Ebook

Wejdź pewnym krokiem w świat programowania Apple!

Jeszcze parę lat temu nie do pomyślenia było, że aplikacje na urządzenia mobilne mogą stanowić tak intratny interes. Jednak urządzenia te podbiły rynek w mgnieniu oka i dziś trudno wyobrazić sobie życie bez nich. Co więcej, dały one jeszcze większe możliwości działania różnym projektantom - praktycznie wszystkie wyposażone są w aparat fotograficzny, odbiornik GPS oraz czujniki położenia. To peryferia, o których programiści tworzący aplikacje na standardowe komputery mogą tylko pomarzyć. Zastanawiasz się, jak wykorzystać ten potencjał?

Ta książka dostarczy Ci odpowiedzi. W trakcie lektury nauczysz się tworzyć atrakcyjne aplikacje na platformę iOS. Jest ona wykorzystywana w urządzeniach firmy Apple, których nikomu nie trzeba przedstawiać. Podczas tworzenia aplikacji dla tej platformy będziesz korzystał z języka Objective-C oraz środowiska XCode 4. Zawarta tu wiedza i liczne przykłady krok-po-kroku pozwolą Ci błyskawicznie opanować trudniejsze partie materiału. Książka ta jest idealną pozycją dla wszystkich programistów chcących rozpocząć przygodę z platformą iOS.

Sprawdź:

  • jak przygotować środowisko pracy XCode
  • jaka jest składnia języka Objective-C
  • jak uruchomić swoją pierwszą aplikację

Twój przewodnik do pierwszej aplikacji na system iOS!


Christopher Fairbairn, Johannes Fahrenkrug i Collin Ruffenach są profesjonalnymi twórcami oprogramowania działającego na platformach mobilnych. Każdy z nich ma więcej niż dziesięcioletnie doświadczenie w używaniu różnych systemów, takich jak iOS, Palm, Windows Mobile i Java.

Wstęp (11)

Podziękowania (13)

O książce (15)

Forum Author Online (19)

Informacje na temat ilustracji umieszczonej na okładce (20)

Część I. Rozpoczęcie pracy z Objective-C (21)

1. Twoja pierwsza aplikacja iOS (23)

  • 1.1. Wprowadzenie do narzędzi programistycznych na platformę iOS (24)
    • 1.1.1. Dostosowanie struktur Cocoa do potrzeb urządzeń mobilnych (25)
  • 1.2. Dostosowanie swoich oczekiwań (26)
    • 1.2.1. Specyfikacja sprzętowa na koniec 2011 roku (26)
    • 1.2.2. Spodziewaj się zawodnego połączenia z internetem (27)
  • 1.3. Przygotowanie prostej gry Coin Toss w Xcode (28)
    • 1.3.1. Wprowadzenie do środowiska IDE firmy Apple - Xcode (29)
    • 1.3.2. Łatwe uruchamianie Xcode (29)
    • 1.3.3. Utworzenie projektu (30)
    • 1.3.4. Tworzenie kodu źródłowego (33)
  • 1.4. Przygotowanie interfejsu użytkownika (37)
    • 1.4.1. Dodanie kontrolek do widoku (38)
    • 1.4.2. Połączenie kontrolek z kodem źródłowym (39)
  • 1.5. Kompilacja gry (43)
  • 1.6. Uruchomienie gry (44)
    • 1.6.1. Wybór urządzenia docelowego (44)
    • 1.6.2. Używanie punktów kontrolnych do śledzenia stanu działającej aplikacji (45)
    • 1.6.3. Uruchomienie gry Coin Toss w symulatorze (46)
    • 1.6.4. Używanie modułu usuwania błędów (47)
  • 1.7. Podsumowanie (49)

2. Typy danych, zmienne i stałe (51)

  • 2.1. Wprowadzenie do aplikacji Rental Manager (52)
    • 2.1.1. Podstawy aplikacji (53)
  • 2.2. Podstawowe typy danych (55)
    • 2.2.1. Liczenie na palcach - liczby całkowite (56)
    • 2.2.2. Liczby zmiennoprzecinkowe (59)
    • 2.2.3. Znaki i ciągi tekstowe (61)
    • 2.2.4. Wartości boolowskie (63)
  • 2.3. Wyświetlanie i konwersja wartości (65)
    • 2.3.1. Funkcja NSLog() i specyfikatory formatu (65)
    • 2.3.2. Rzutowanie typów i konwersja typów (67)
  • 2.4. Tworzenie własnych typów danych (69)
    • 2.4.1. Typy wyliczeniowe (69)
    • 2.4.2. Struktury (71)
    • 2.4.3. Tablice (73)
    • 2.4.4. Waga odpowiednich nazw (75)
  • 2.5. Ukończenie aplikacji Rental Manager 1.0, czyli kierujemy się do App Store! (77)
  • 2.6. Podsumowanie (79)

3. Wprowadzenie do obiektów (81)

  • 3.1. Krótkie wprowadzenie do koncepcji programowania zorientowanego obiektowo (82)
    • 3.1.1. Co złego jest w języku proceduralnym, takim jak C? (82)
    • 3.1.2. Czym jest obiekt? (83)
    • 3.1.3. Czym jest klasa? (83)
    • 3.1.4. Dziedziczenie i polimorfizm (83)
  • 3.2. Brakujący typ danych - id (84)
  • 3.3. Wskaźniki i różnice pomiędzy odniesieniem i wartością typu (85)
    • 3.3.1. Mapowanie pamięci (86)
    • 3.3.2. Pobieranie adresu zmiennej (86)
    • 3.3.3. Podążanie za wskaźnikiem (87)
    • 3.3.4. Porównywanie wartości wskaźników (88)
  • 3.4. Komunikacja z obiektami (89)
    • 3.4.1. Wysyłanie wiadomości obiektowi (89)
    • 3.4.2. Wysyłanie wiadomości klasie (90)
    • 3.4.3. Wysyłanie nieistniejących wiadomości (90)
    • 3.4.4. Wysłanie wiadomości do nil (92)
  • 3.5. Ciągi tekstowe (93)
    • 3.5.1. Tworzenie ciągu tekstowego (93)
    • 3.5.2. Wyodrębnianie znaków z ciągu tekstowego (94)
    • 3.5.3. Modyfikacja ciągu tekstowego (95)
    • 3.5.4. Porównywanie ciągów tekstowych (96)
  • 3.6. Przykładowa aplikacja (97)
  • 3.7. Podsumowanie (100)

4. Przechowywanie danych w kolekcjach (101)

  • 4.1. Tablice (102)
    • 4.1.1. Budowa tablicy (102)
    • 4.1.2. Uzyskanie dostępu do elementów tablicy (104)
    • 4.1.3. Wyszukiwanie elementów tablicy (105)
    • 4.1.4. Iteracja przez tablice (106)
    • 4.1.5. Dodawanie elementów do tablicy (108)
  • 4.2. Słowniki (110)
    • 4.2.1. Tworzenie słownika (110)
    • 4.2.2. Uzyskanie dostępu do par przechowywanych w słowniku (112)
    • 4.2.3. Dodawanie par klucz-wartość (113)
    • 4.2.4. Wyświetlenie wszystkich kluczy i wartości (114)
  • 4.3. Boxing (116)
    • 4.3.1. Klasa NSNumber (117)
    • 4.3.2. Klasa NSValue (118)
    • 4.3.3. nil kontra NULL kontra NSNull (118)
  • 4.4. Aplikacja Rental Manager zaczyna używać danych (119)
  • 4.5. Podsumowanie (122)

Część II. Tworzenie własnych obiektów (123)

5. Tworzenie klas (125)

  • 5.1. Tworzenie własnej klasy (126)
    • 5.1.1. Dodanie nowej klasy do projektu (126)
  • 5.2. Deklaracja interfejsu klasy (127)
    • 5.2.1. Zmienne egzemplarza (129)
    • 5.2.2. Deklarowanie metod (130)
    • 5.2.3. Przygotowanie pliku nagłówkowego dla klasy CTRentalProperty (133)
  • 5.3. Utworzenie implementacji klasy (135)
    • 5.3.1. Zdefiniowanie implementacji metody (135)
    • 5.3.2. Uzyskanie dostępu do zmiennych egzemplarza (135)
    • 5.3.3. Wysyłanie wiadomości do self (136)
    • 5.3.4. Uzupełnienie pliku metody klasy CTRentalProperty (137)
  • 5.4. Zdefiniowane właściwości (138)
    • 5.4.1. Składnia @property (138)
    • 5.4.2. Automatyczne wygenerowanie metod typu getter i setter (141)
    • 5.4.3. Składnia z użyciem kropki (143)
  • 5.5. Tworzenie i usuwanie obiektów (144)
    • 5.5.1. Tworzenie i inicjalizacja obiektów (145)
    • 5.5.2. Metoda init nie jest najsprytniejsza (146)
    • 5.5.3. Połączenie alokacji i inicjalizacji (148)
    • 5.5.4. Usuwanie obiektów (149)
  • 5.6. Używanie klasy w aplikacji Rental Manager (150)
  • 5.7. Podsumowanie (153)

6. Rozszerzanie klas (155)

  • 6.1. Tworzenie podklas (156)
    • 6.1.1. Dlaczego tworzymy podklasy? (156)
  • 6.2. Dodawanie nowych zmiennych egzemplarza (158)
  • 6.3. Uzyskiwanie dostępu do istniejących zmiennych egzemplarza (161)
    • 6.3.1. Podejście polegające na ręcznym utworzeniu metod typu getter i setter (162)
  • 6.4. Nadpisywanie metod (163)
    • 6.4.1. Nadpisywanie metody description (164)
  • 6.5. Klastry klas (166)
    • 6.5.1. Dlaczego stosowane są klastry klas? (167)
    • 6.5.2. Wiele klastrów publicznych (167)
  • 6.6. Kategorie (168)
    • 6.6.1. Rozszerzenie klasy bez użycia podklasy (168)
    • 6.6.2. Używanie kategorii (169)
    • 6.6.3. Rozważania dotyczące używania kategorii (170)
  • 6.7. Zastosowanie podklas w aplikacji Rental Manager (171)
    • 6.7.1. Utworzenie klasy CTLease i jej podklas (172)
    • 6.7.2. Utworzenie podklasy CTPeriodicLease jako podklasy CTLease (173)
    • 6.7.3. Utworzenie podklasy CTFixedLease jako podklasy CTLease (174)
  • 6.8. Podsumowanie (176)

7. Protokoły (177)

  • 7.1. Definiowanie protokołu (179)
  • 7.2. Implementacja protokołu (180)
    • 7.2.1. Tworzenie funkcji wywoływania metod protokołu (180)
    • 7.2.2. Zapewnienie klasie zgodności z protokołem (182)
  • 7.3. Ważne protokoły (185)
    • 7.3.1. Protokół UITableViewDataSource (185)
    • 7.3.2. Protokół UITableViewDelegate (188)
    • 7.3.3. Protokół UIActionSheetDelegate (192)
    • 7.3.4. Protokół NSXMLParser (193)
  • 7.4. Podsumowanie (198)

8. Dynamiczne określanie typu i ustalanie typu w trakcie działania aplikacji (199)

  • 8.1. Typy statyczne kontra dynamiczne (200)
    • 8.1.1. Przyjmowanie założeń dotyczących typu ustalanego w trakcie działania aplikacji (201)
  • 8.2. Łączenie dynamiczne (202)
  • 8.3. Jak działają wiadomości? (203)
    • 8.3.1. Metody, selektory i implementacje (204)
    • 8.3.2. Obsługa nieznanych selektorów (205)
    • 8.3.3. Wysyłanie wiadomości do nil (207)
  • 8.4. Informacje o typie dostarczane w trakcie działania aplikacji (208)
    • 8.4.1. Ustalenie, czy wiadomość odpowie na wiadomość (208)
    • 8.4.2. Wysyłanie wiadomości wygenerowanej w trakcie działania aplikacji (208)
    • 8.4.3. Dodawanie nowych metod do klasy podczas działania aplikacji (210)
  • 8.5. Praktyczne wykorzystanie introspekcji typu podczas działania aplikacji (212)
  • 8.6. Podsumowanie (213)

9. Zarządzanie pamięcią (215)

  • 9.1. Własność obiektu (216)
  • 9.2. Licznik użycia obiektu (218)
    • 9.2.1. Zwolnienie obiektu (219)
    • 9.2.2. Przytrzymanie obiektu (220)
    • 9.2.3. Określenie bieżącej wartości licznika użycia (221)
  • 9.3. Pule autorelease (223)
    • 9.3.1. Czym jest pula autorelease? (224)
    • 9.3.2. Dodawanie obiektów do puli autorelease (224)
    • 9.3.3. Utworzenie nowej puli autorelease (224)
    • 9.3.4. Usuwanie obiektów z puli (226)
    • 9.3.5. Dlaczego puli autorelease nie można wykorzystywać w każdej sytuacji? (226)
  • 9.4. Strefy pamięci (229)
  • 9.5. Reguły własności (231)
  • 9.6. Ostrzeżenie o małej ilości dostępnej pamięci (232)
    • 9.6.1. Implementacja protokołu UIApplicationDelegate (233)
    • 9.6.2. Nadpisanie metody didReceiveMemoryWarning (234)
    • 9.6.3. Obserwacja powiadomienia UIApplicationDidReceiveMemoryWarningNotification (237)
  • 9.7. Podsumowanie (239)

Część III. Maksymalne wykorzystanie funkcji struktur (241)

10. Obsługa błędów i wyjątków (243)

  • 10.1. NSError - obsługa błędów w sposób zgodny z Cocoa (244)
    • 10.1.1. Komunikacja z NSError (245)
    • 10.1.2. Analiza słownika userInfo klasy NSError (245)
  • 10.2. Tworzenie obiektu NSError (247)
    • 10.2.1. Wprowadzenie RentalManagerAPI (247)
    • 10.2.2. Obsługa i wyświetlanie błędów w aplikacji RentalManagerAPI (250)
  • 10.3. Wyjątki (251)
    • 10.3.1. Zgłaszanie wyjątku (251)
    • 10.3.2. Przechwytywanie wyjątku (252)
  • 10.4. Podsumowanie (253)

11. Key-Value Coding i NSPredicate (255)

  • 11.1. Zapewnienie obiektom zgodności z KVC (257)
    • 11.1.1. Uzyskanie dostępu do właściwości za pomocą KVC (258)
    • 11.1.2. Tworzenie ścieżek kluczy (258)
    • 11.1.3. Zwracanie wielu wartości (259)
    • 11.1.4. Agregacja i zbieranie wartości (259)
  • 11.2. Obsługa przypadków specjalnych (261)
    • 11.2.1. Obsługa nieznanych kluczy (261)
    • 11.2.2. Obsługa wartości nil (262)
  • 11.3. Filtrowanie i dopasowywanie za pomocą predykatów (263)
    • 11.3.1. Obliczenie predykatu (263)
    • 11.3.2. Filtrowanie kolekcji (264)
    • 11.3.3. Wyrażenie warunku predykatu (264)
    • 11.3.4. Bardziej skomplikowane wyrażenia (265)
    • 11.3.5. Używanie ścieżek kluczy w wyrażeniu predykatu (266)
    • 11.3.6. Parametryzowanie i stosowanie szablonu wyrażenia predykatu (267)
  • 11.4. Przykładowa aplikacja (268)
  • 11.5. Podsumowanie (271)

12. Odczyt i zapis danych aplikacji (273)

  • 12.1. Historia Core Data (275)
    • 12.1.1. Do czego służy Core Data? (275)
  • 12.2. Obiekty Core Data (276)
    • 12.2.1. Kontekst obiektów zarządzanych (277)
    • 12.2.2. Koordynator trwałego magazynu danych (277)
    • 12.2.3. Model obiektu zarządzanego (277)
    • 12.2.4. Magazyn trwałych obiektów (278)
  • 12.3. Zasoby Core Data (278)
    • 12.3.1. Encje Core Data (278)
    • 12.3.2. Atrybuty Core Data (279)
    • 12.3.3. Związki w Core Data (280)
  • 12.4. Utworzenie aplikacji PocketTasks (281)
    • 12.4.1. Analiza szablonu Xcode z obsługą Core Data (281)
    • 12.4.2. Budowa modelu danych (281)
    • 12.4.3. Definicje związków (282)
    • 12.4.4. Tworzenie encji Person (284)
    • 12.4.5. Pobieranie encji Person (286)
    • 12.4.6. Dodanie TableView (287)
    • 12.4.7. Dodawanie i usuwanie osób (290)
    • 12.4.8. Zarządzanie zadaniami (294)
    • 12.4.9. Używanie obiektów modelu (297)
  • 12.5. Wykraczając poza podstawy (299)
    • 12.5.1. Zmiana modelu danych (299)
    • 12.5.2. Wydajność (301)
    • 12.5.3. Obsługa błędów i weryfikacja (302)
  • 12.6. Podsumowanie (304)

13. Bloki i technologia Grand Central Dispatch (305)

  • 13.1. Składnia bloków (306)
    • 13.1.1. Blok stanowi zamkniętą całość (309)
    • 13.1.2. Bloki i zarządzanie pamięcią (310)
    • 13.1.3. API bazujące na blokach w strukturach iOS dostarczanych przez Apple (313)
  • 13.2. Asynchroniczne wykonywanie zadań (314)
    • 13.2.1. Poznaj technologię GCD (315)
    • 13.2.2. Podstawy technologii GCD (315)
    • 13.2.3. Budowa aplikacji RealEstateViewer (316)
    • 13.2.4. Asynchroniczne przeprowadzanie wyszukiwania obrazów (321)
    • 13.2.5. Asynchroniczne wczytywanie obrazów (322)
  • 13.3. Podsumowanie (324)

14. Techniki usuwania błędów (325)

  • 14.1. Utworzenie aplikacji zawierającej błędy (326)
  • 14.2. Zrozumienie funkcji NSLog() (327)
  • 14.3. Kontrola wycieków pamięci za pomocą narzędzia Instruments (331)
  • 14.4. Wykrywanie zombie (333)
  • 14.5. Podsumowanie (336)

Dodatki (337)

A: Instalacja iOS SDK (339)

  • A.1. Instalacja iOS SDK (340)
  • A.2. Przygotowanie urządzenia iOS (341)

B: Podstawy języka C (345)

  • B.1. Konwencje nazw zmiennych (346)
  • B.2. Wyrażenia (349)
  • B.3. Polecenia warunkowe (353)
  • B.4. Polecenia pętli (358)
  • B.5. Podsumowanie (364)

C: Alternatywy dla Objective-C (365)

  • C.1. Krótka historia Objective-C (366)
  • C.2. Alternatywy dla Objective-C i Cocoa (368)
  • C.3. iPhone SDK - Safari (369)
  • C.4. Języki skryptowe - Lua i Ruby (374)
  • C.5. Waga ciężka - Adobe Flash (376)
  • C.6. Mono (.NET) (378)
  • C.7. Podsumowanie (380)

Skorowidz (381)

  • Title: Objective-C. Podstawy
  • Author: Christopher Fairbairn, Collin Ruffenach, Johannes Fahrenkrug
  • Original title: Objective-C Fundamentals
  • Translation: Robert Górczyński
  • ISBN: 978-83-246-5250-1, 9788324652501
  • Date of issue: 2012-06-26
  • Format: Ebook
  • Item ID: objecp
  • Publisher: Helion