POSLEDNÍ ČLÁNKY



V minulém díle jsme si ukázali, jak zkompilovat zdrojový kód jazyka Objective-C v Debianu a Ubuntu pomocí GNUstepu. Ke kontrole funkčnosti nainstalovaných částí jsme použili vzorový kód prvního programu, který na obrazovku vypíše pozdrav „Ahoj svete!“. Ve druhé lekci minikurzu vysvětlíme, jaký je význam jednotlivých řádek zdrojového kódu.

 

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@ "Ahoj svete!");
[pool drain];
return 0;
}

 

V jazyku Objective-C rozlišujeme malá a velká písmena. Zároveň nezáleží, kde na řádce začnete kód psát, takže pro zvýšení přehlednosti můžete texty zarovnávat pod sebe.

Existují dva způsoby, jak vyjádřit komentář (text, který kompilátor ignoruje a opět slouží k lepší orientaci v kódu). Jednořádkové komentáře se zapisují pomocí dvou lomítek na začátku řádky. Více řádkové komentáře vkládáme mezi lomítko s hvězdičkou.

 

//Toto je jednořádkový komentář.

/* Tento komentář
je na více řádkách. */

 

#import <Foundation/Foundation.h>

První řádek ve zdrojovém kódu říká kompilátoru, aby vyhledal a používal framework Foundation. Framework obsahuje sadu základních tříd, díky kterým je vývoj aplikací v Objective-C snadnější a rychlejší. Co je to třída si vysvětlíme v dalších lekcích. [1]

Direktiva preprocesoru #import není nic jiného klasické #include, pouze s tím rozdílem, že je ošetřeno, aby tentýž zdrojový soubor byl překládán pouze jednou.

 

 

int main (int argc, const char * argv[])

Příkazem deklarujeme speciální funkci main. Funkce main ohlašuje, že na tomto místě se program začne vykonávat.

Rezervované slovo int určuje typ návratové hodnoty funkce main, značí celé číslo ( z anglického integer). Pojem „rezervované slovo“ znamená, že jej nelze použít jako jméno proměnné, protože pro kompilátor má speciální význam.

Příkazy, které se mají vykonávat, se nachází mezi složenými závorkami a velmi často jsou ukončené středníkem. Náš program má 4 příkazy.

Argcargv jsou parametry funkce main. Argc pochází z anglického „argument count“ a značí proměnnou, která v sobě nese informaci o počtu parametrů. To znamená, že když program spustíme se dvěma parametry, pak hodnota uložená v proměnné argc bude 3, protože jako nultá položka se ukládá jméno programu. [2]

Argv (z anglického „argument vector“) je pole ukazatelů na řetězce, ale díky zaměnitelnosti ukazatele a pole na parametr můžeme nahlížet i jako na pole řetězců.

Mějme:

ls -la /home/uzivatel

Pak hodnota argc je rovna 3 a argv[0] je ukazatel na řetězec „ls“, argv[1] je ukazatel na „-la“ a argv[2]=„/home/uzivatel“.

 

 

 

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

Jedná se o řádku, kterou XCode vkládá do vzorových šablon automaticky. Příkaz nám zajistí prostor v paměti pro vlastní program.

Abychom pochopili, jak se pracuje s pamětí, musíme pochopit, jak vznikají a zanikají objekty a co se s nimi děje v tomto mezičase.

Objekty vznikají na základě požadavků zaslaných jejich třídám. Třída vytvoří novou instanci, pokud jí zašleme zprávu alloc. Alokací se objektu rezervuje místo v paměti pro práci s programem. V této podobě jsou ale hodnoty proměnných nulové, a proto instance musíme ještě inicializovat zasláním zprávy init, tedy nastavit proměnným počáteční vlastnosti.

Objekt, který explicitně vytvoříme zasíláním zpráv alloc/init, pak musíme explicitně uvolnit pomocí autorelease nebo release. Autorelease zajistí, že objekt zanikne po ukončení metody, která jej používala, release zajistí, aby objekt zanikl ihned.

Zprávy autorelease jsou zajišťovány třídou NSAutoReleasePool. Autorelease pool je jakýmsi manažerem paměti, kam se přiřadí ty objekty, kterým byla zaslána zpráva autorelease. Po nějakém čase toto úložiště zanikne a zašle všem objektů zprávu release.

Pomocí [pool release] na konci programu vyprazdňujeme paměť. Podobný význam má příkaz [pool drain]. [3-5]

Zápis se používá následující:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// náš kód
[pool release];

nebo jiným zápisem:

@autoreleasepool
{
// náš kód
}

 

 

NSLog(@"Ahoj svete!");

Tato řádka oznamuje funkci NSLog, aby na obrazovce vytiskla větu Ahoj svete!. Funkce NSLog je předdefinovaná a proto se nemusíme starat o její deklaraci či definici. Symbol zavináče @ s uvozovkami "" značí, že mezi uvozovkami je řetězec znaků. Kromě toho se na obrazovce vytiskne ještě datum a čas, a ještě několik čísel, o kterých se nebudeme zmiňovat.

 

 

 

return 0;

Tento řádek říká, aby se ukončilo provádění příkazů z funkce main. Příkaz navrací číselnou hodnotu nula. Nula se navrací tehdy, pokud program skončil bez chyb.

 

V příštím díle se podíváme podrobněji na třídy a objekty.

 

[1] http://www.techotopia.com/index.php/
An_Overview_of_the_Objective-C_Foundation_Framework

[2] http://physics.ujep.cz/~mmaly/vyuka/oporaPrgB/042.html
[3] http://blog.urbasek.cz/cocoa-objective-c-a-prace-s-pameti/
[4] http://objc.smehlik.net/ucebnice/objc-sprava-pameti/
[5] http://www.mujmac.cz/rubriky/informace/nastal-cas-na
-kakao-malem-bychom-zapomneli-nsautoreleasepool-55230cz













Volba lidskosti