<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>inchoo.hr &#187; iPhone development</title>
	<atom:link href="http://inchoo.hr/category/iphone-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://inchoo.hr</link>
	<description></description>
	<lastBuildDate>Thu, 29 Jul 2010 09:45:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Delegati i protokoli</title>
		<link>http://inchoo.hr/delegati-i-protokoli/</link>
		<comments>http://inchoo.hr/delegati-i-protokoli/#comments</comments>
		<pubDate>Mon, 31 May 2010 13:00:14 +0000</pubDate>
		<dc:creator>Luka Gabric</dc:creator>
				<category><![CDATA[iPhone development]]></category>

		<guid isPermaLink="false">http://inchoo.hr/?p=299</guid>
		<description><![CDATA[Delegati i protokoli su vrlo korisni koncepti objektno orijentiranog programiranja. Često se koriste zajedno, pogotovo u situacijama kada je potrebno određenom informacijom obavijestiti neki nepoznati objekt, odnosno objekt kojemu se još ne poznaje klasa. Pretpostavimo da imamo nekoliko klasa koje je potrebno obavijestiti o nekom događaju. Kod događaja, klase se trebaju obavijestiti nekim rezultatom koji [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://inchoo.hr/wp-content/uploads/2010/02/demystifying_photo_2-150x150.jpg" alt="demystifying_photo_2" title="demystifying_photo_2" width="150" height="150" class="alignright size-thumbnail wp-image-142" /></p>
<p>Delegati i protokoli su vrlo korisni koncepti objektno orijentiranog programiranja. Često se koriste zajedno, pogotovo u situacijama kada je potrebno određenom informacijom obavijestiti neki nepoznati objekt, odnosno objekt kojemu se još ne poznaje klasa.</p>
<p>Pretpostavimo da imamo nekoliko klasa koje je potrebno obavijestiti o nekom događaju. Kod događaja, klase se trebaju obavijestiti nekim rezultatom koji će se koristiti u različitim implementacijama tih klasa.</p>
<p>Prvo trebamo izraditi protokol, nazovimo ga MojProtokol koji će se koristiti za definiranje metode koja će se pozivati nakon događaja. Pretpostavimo da je željeni rezultat cijeli broj koji se nakon događaja treba proslijediti svim delegatima. Nije bitno kako će delegati implementirati tu metodu, bitno je samo da implementiraju željeni protokol.</p>
<p>Protokol.h:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@protocol</span> MojProtokol
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> dobiveniParametar<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>broj;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>Sada je potrebno izraditi klasu OperacijskaKlasa koja će obavijestiti delegate s određenim rezultatom.</p>
<p>OperacijskaKlasa.h:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;Protokol.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@interface</span> OperacijskaKlasa <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span> 
<span style="color: #002200;">&#123;</span>
&nbsp;
	<span style="color: #a61390;">id</span> &lt; MojProtokol &gt; delegati;
	<span style="color: #400080;">NSMutableArray</span> <span style="color: #002200;">*</span>nizDelegata;
&nbsp;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> registrajDelegata<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>delegat;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> obavijestiDelegate;
&nbsp;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>OperationsClass.m</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;OperacijskaKlasa.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> OperacijskaKlasa
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> init
<span style="color: #002200;">&#123;</span>
	self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> 
	<span style="color: #002200;">&#123;</span>
		nizDelegata <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSMutableArray</span> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
	<span style="color: #a61390;">return</span> self;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> registrajDelegata<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>delegat
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">!</span><span style="color: #002200;">&#91;</span>nizDelegata containsObject<span style="color: #002200;">:</span> delegat<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
		<span style="color: #002200;">&#91;</span>nizDelegata addObject<span style="color: #002200;">:</span>delegat<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> obavijestiDelegate
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> <span style="color: #a61390;">id</span> &lt; MojProtokol &gt; delegat <span style="color: #a61390;">in</span> nizDelegata <span style="color: #002200;">&#41;</span> 
	<span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span>delegat dobiveniParametar<span style="color: #002200;">:</span><span style="color: #2400d9;">10</span><span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>U konstruktoru se klase postavlja niz koji će pratiti registrirane delegate, odnosno delegate koje će se obavijestiti o događaju. Korištenje protokola vrlo je važno u ovom slučaju jer se ne zna o instanci koje klase je riječ. Bitno je da ta instanca implementira MojProtokol. Ukoliko je to slučaj, bit će moguće pozivanje metode dobiveniParametar tog objekta budući da on implementira protokol MojProtokol, a time i metodu dobiveniParametar deklariranu u protokolu.</p>
<p>Sljedeći korak je kreiranje dvije klase delegata, DelegatKlasa i DrugiDelegatKlasa, koje će implementirati navedeni protokol. Implementacija protokola bit će različita za te dvije klase.</p>
<p>DelegatKlasa.h:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;Protokol.h&quot;</span>
<span style="color: #6e371a;">#import &quot;OperacijskaKlasa.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@interface</span> DelegatKlasa <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span>  &lt; MojProtokol &gt; <span style="color: #002200;">&#123;</span>
&nbsp;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> izradiSInstancomOperacijskeKlase<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>OperacijskaKlasa <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>instancaOperacijskeKlase;
&nbsp;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>DelegatKlasa.m:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;DelegatKlasa.h&quot;</span>
<span style="color: #6e371a;">#import &quot;OperacijskaKlasa.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> DelegatKlasa
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> izradiSInstancomOperacijskeKlase<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>OperacijskaKlasa <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>instancaOperacijskeKlase
<span style="color: #002200;">&#123;</span>
	self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> 
	<span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span>instancaOperacijskeKlase registrajDelegata<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
	<span style="color: #a61390;">return</span> self;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> dobiveniParametar<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>broj
<span style="color: #002200;">&#123;</span>
	NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Vrijednost = %d&quot;</span>, broj<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>DelegatKlasa implementira protokol MojProtokol, a u konstruktoru se registrira kao delegat u klasi OperacijskaKlasa. Protokol je implementiran metodom dobiveniParametar.</p>
<p>Druga se klasa zove DrugaKlasaDelegata.</p>
<p>DrugaKlasaDelegata.h:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;Protocol.h&quot;</span>
<span style="color: #6e371a;">#import &quot;OperacijskaKlasa.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@interface</span> DrugaKlasaDelegata <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span> &lt; MojProtokol &gt; <span style="color: #002200;">&#123;</span>
&nbsp;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> izradiSInstancomOperacijskeKlase<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>OperacijskaKlasa <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>instancaOperacijskeKlase;
&nbsp;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>DrugaKlasaDelegata.m:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;DrugaKlasaDelegata.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> DrugaKlasaDelegata
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> izradiSInstancomOperacijskeKlase<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>OperacijskaKlasa <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>instancaOperacijskeKlase
<span style="color: #002200;">&#123;</span>
	self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> 
	<span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span>instancaOperacijskeKlase registrajDelegata<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
	<span style="color: #a61390;">return</span> self;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> dobiveniParametar<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>broj
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">int</span> nekaVrijednost <span style="color: #002200;">=</span> broj <span style="color: #002200;">+</span> <span style="color: #2400d9;">15</span>;
&nbsp;
	NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Potpuno druga implementacija: nekaVrijednost = %d&quot;</span>, nekaVrijednost<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>DrugaKlasaDelegata implementira protkol MojProtokol te se u konstruktoru, isto kao KlasaDelegate, registrira kao delegat instanci klase OperacijskaKlasa. Implementacija protokola MojProtokol klase DrugaKlasaDelegata, metoda dobiveniParametar, razlikuje se od implementacije u klasi DelegatKlasa.</p>
<p>Prikazani kod može se implementirati tako da se prvo napravi instanca klase OperacijskaKlasa.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;">OperacijskaKlasa <span style="color: #002200;">*</span>operacijskaInstanca <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>OperacijskaKlasa alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>Zatim se izrađuje instanca klase DelegatKlasa koja se inicijalizira s instancom klase OperacijskaKlasa.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;">DelegatKlasa <span style="color: #002200;">*</span>instancaDelegatKlase <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>DelegatKlasa alloc<span style="color: #002200;">&#93;</span> izradiSInstancomOperacijskeKlase<span style="color: #002200;">:</span>operacijskaInstanca<span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>U konstruktoru klase DelegatKlasa odvija se registracija delegata u operacijskojInstanci.</p>
<p>Delegati se mogu obavijestiti na sljedeći način:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;">NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Prva obavijest (samo jedan delegat u popisu)&quot;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#91;</span>operacijskaInstanca obavijestiDelegate<span style="color: #002200;">&#93;</span>;
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;====================================================&quot;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
Rezultat<span style="color: #002200;">:</span>
&nbsp;
Prva obavijest <span style="color: #002200;">&#40;</span>samo jedan delegat u popisu<span style="color: #002200;">&#41;</span>
Vrijednost <span style="color: #002200;">=</span> <span style="color: #2400d9;">10</span>
<span style="color: #002200;">====================================================</span></pre></td></tr></table></div>

<p>Instanca klase OperacijskaKlasa šalje obavijest svim delegatima koji su se registrirali. U nizu se trenutno nalazi jedan delegat &#8211; instancaDelegatKlase.</p>
<p>Dodavanjem još jednog delegata, onog klase DrugaKlasaDelegata, i pozivanjem obavijestiDelegate metode dobit ćemo sljedeći rezultat:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"> DrugaKlasaDelegata <span style="color: #002200;">*</span>drugaInstancaDelegata <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>DrugaKlasaDelegata alloc<span style="color: #002200;">&#93;</span> izradiSInstancomOperacijskeKlase<span style="color: #002200;">:</span>operacijskaInstanca<span style="color: #002200;">&#93;</span>;
&nbsp;
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Druga obavijest (oba delegata u popisu)&quot;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#91;</span>operacijskaInstanca obavijestiDelegate<span style="color: #002200;">&#93;</span>;
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;====================================================&quot;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
Rezultat<span style="color: #002200;">:</span>
&nbsp;
Druga obavijest <span style="color: #002200;">&#40;</span>oba delegata u popisu<span style="color: #002200;">&#41;</span>
Value <span style="color: #002200;">=</span> <span style="color: #2400d9;">10</span>
Potpuno druga implementacija<span style="color: #002200;">:</span> nekaVrijednost <span style="color: #002200;">=</span> <span style="color: #2400d9;">25</span>
<span style="color: #002200;">====================================================</span></pre></td></tr></table></div>

<p>Prema rezultatima, može se vidjeti da su oba delegata obaviještena budući da su se registrirali kao delegati. Oba objekta su dobili obavijest pozivanjem iste metode s istim parametrom, ali su implementacije te metode potpuno drugačije u svakoj od klasa.</p>
<p>Delegacija je često korišten uzorak u objektno-orijentiranom programiranju uz koji se često koriste protokoli koji omogućavaju komunikaciju s instancama do ovog trenutka nepoznatih klasa. Bitno je samo da te klase implementiraju definirani protokol.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.hr/delegati-i-protokoli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C: Delegati</title>
		<link>http://inchoo.hr/objective-c-delegati/</link>
		<comments>http://inchoo.hr/objective-c-delegati/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 19:00:03 +0000</pubDate>
		<dc:creator>Luka Gabric</dc:creator>
				<category><![CDATA[iPhone development]]></category>

		<guid isPermaLink="false">http://inchoo.hr/?p=266</guid>
		<description><![CDATA[Delegacija predstavlja uzorak koji je često korišten u objektno orijentiranom programiranju. Koristi se u slučajevima kada glavni objekt predaje određeni zadatak pomoćnom objektu koji će taj zadatak izvršiti i rezultatom obavijestiti glavni objekt. U ovom se slučaju pomoćni objekt naziva delegatom. Primjena delegata predstavljena je jednostavnim problemom zbrajanja dva cijela broja. Pretpostavimo da klasa, čija [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="margin-left: 5px; margin-bottom: 10px;" title="delegate" src="http://inchoo.hr/wp-content/uploads/2010/04/delegate-150x150.GIF" alt="delegate" width="150" height="150" /></p>
<p>Delegacija predstavlja uzorak koji je često korišten u objektno orijentiranom programiranju. Koristi se u slučajevima kada glavni objekt predaje određeni zadatak pomoćnom objektu koji će taj zadatak izvršiti i rezultatom obavijestiti glavni objekt. U ovom se slučaju pomoćni objekt naziva delegatom.</p>
<p>Primjena delegata predstavljena je jednostavnim problemom zbrajanja dva cijela broja. Pretpostavimo da klasa, čija će instanca predstavljati glavni objekt, želi prepustiti rješavanje problema zbrajanja dvaju brojeva nekoj drugoj klasi. Instanca te druge klase predstavljat će delegata.</p>
<p>U glavnoj bi se klasi delegat mogao stvoriti na sljedeći način:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">KlasaDelegata <span style="color: #002200;">*</span>mojDelegat;
mojDelegat <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>KlasaDelegata alloc<span style="color: #002200;">&#93;</span> glavnaKlasa<span style="color: #002200;">:</span>self
                                       prviBroj<span style="color: #002200;">:</span>a
                                      drugiBroj<span style="color: #002200;">:</span>b
                                         metoda<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>delegatJeIzracunaoSumu<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>Objekt pod nazivom mojDelegat stvara se s parametrima koji su potrebni za komunikaciju između delegata i glavnog objekta. U ovom se slučaju delegat stvara s parametrima instance glavne klase (self), parametrima  za izračunavanje (a i b) te metodom koja se treba pozvati nakon što se izračuna suma (delegatJeIzracunaoSumu).</p>
<p>Glavna klasa definira metodu delegatJeIzracunaoSumu koju delegat poziva nakon izračunavanja sume.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> delegatJeIzracunaoSumu<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSNumber</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>suma
<span style="color: #002200;">&#123;</span>
   NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Delegat je izračunao: %d + %d = %d&quot;</span>, a, b, <span style="color: #002200;">&#91;</span>suma intValue<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Delegat sadrži konstruktor definiran na sljedeći način:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> glavnaKlasa<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>glavniObjekt
          prviBroj<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>a
         drugiBroj<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>b
            metoda<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">SEL</span><span style="color: #002200;">&#41;</span>metodaGlavneKlase
<span style="color: #002200;">&#123;</span>
   self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
   <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span>
   <span style="color: #002200;">&#123;</span>
      <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>glavniObjekt respondsToSelector<span style="color: #002200;">:</span>metodaGlavneKlase<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
      <span style="color: #002200;">&#123;</span>
         <span style="color: #400080;">NSNumber</span> <span style="color: #002200;">*</span>suma <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNumber</span> numberWithInt<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>a <span style="color: #002200;">+</span> b<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
         <span style="color: #002200;">&#91;</span>glavniObjekt performSelector<span style="color: #002200;">:</span>metodaGlavneKlase withObject<span style="color: #002200;">:</span>suma<span style="color: #002200;">&#93;</span>;
      <span style="color: #002200;">&#125;</span>
   <span style="color: #002200;">&#125;</span>
   <span style="color: #a61390;">return</span> self;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>U konstruktoru delegat prima parametre potrebne za izvršavanje zadatka. Nakon što se izvrši inicijalizacija delegata, provjerava se sadrži li objekt selektor, odnosno navedenu metodu – metodaGlavneKlase.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>glavniObjekt respondsToSelector<span style="color: #002200;">:</span>metodaGlavneKlase<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span></pre></div></div>

<p>U slučaju da metoda postoji izračunava se suma.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #400080;">NSNumber</span> <span style="color: #002200;">*</span>suma <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNumber</span> numberWithInt<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>a <span style="color: #002200;">+</span> b<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>Kada delegat sadrži sve informacije koje su potrebne glavnom objektu, u ovom slučaju izračunatu sumu, izvršava se selektor, odnosno metoda s parametrom tj. objektom sume.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>glavniObjekt performSelector<span style="color: #002200;">:</span>metodaGlavneKlase withObject<span style="color: #002200;">:</span>suma<span style="color: #002200;">&#93;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://inchoo.hr/objective-c-delegati/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C: Protokoli</title>
		<link>http://inchoo.hr/objective-c-protokoli/</link>
		<comments>http://inchoo.hr/objective-c-protokoli/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 11:55:56 +0000</pubDate>
		<dc:creator>Luka Gabric</dc:creator>
				<category><![CDATA[iPhone development]]></category>

		<guid isPermaLink="false">http://inchoo.hr/?p=214</guid>
		<description><![CDATA[Protokoli se koriste za definiranje skupa metoda koje se koriste ili se mogu implementirati u bilo kojoj klasi. Ključnom riječi @protocol započinje deklariranje protokola. Kod definiranja protokola ne postoje vitičaste zagrade s varijablama jer ih protokoli ne mogu definirati. @protocol ImeProtokola &#160; //deklaracije metoda &#160; - &#40;void&#41; nekaMetoda; &#160; @end Metoda definirana u protokolu može [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-237" style="margin-right: 10px; margin-bottom: 10px;" title="computer_programming" src="http://inchoo.hr/wp-content/uploads/2010/03/computer_programming-300x225.jpg" alt="computer_programming" width="234" height="130" />Protokoli se koriste za definiranje skupa metoda koje se koriste ili se mogu implementirati u bilo kojoj klasi.</p>
<p>Ključnom riječi @protocol započinje deklariranje protokola. Kod definiranja protokola ne postoje vitičaste zagrade s varijablama jer ih protokoli ne mogu definirati.
<div style = "clear:both;"></div>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@protocol</span> ImeProtokola
&nbsp;
<span style="color: #11740a; font-style: italic;">//deklaracije metoda</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> nekaMetoda;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Metoda definirana u protokolu može biti označena kao obvezna ili kao izborna u implementaciji. Obvezne se metode označavaju ključnom riječi @required, a izborne se metode označavaju ključnom riječi @optional. Ako metoda nije posebno označena jednom od ove dvije ključne riječi, smatra se da je obvezna.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@protocol</span> MojProtokol
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovaMetodaJeObvezna;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovaMetodaJeIstoObvezna;
&nbsp;
@optional
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovaMetodaJeIzborna;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovaMetodaJeIstoIzborna;
&nbsp;
@required
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovoJeObveznaMetoda;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Protokol može implementirati drugi protokol. Ovaj oblik implementacije ima neke sličnosti s nasljeđivanjem kod klasa, ali bez hijerarhije koja postoji kod klasa. Protokol MojProtokol iz prethodnog primjera može biti definiran na sljedeći način:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@protocol</span> MojProtokol &lt; NekiProtokol, DrugiProtokol &gt;
&nbsp;
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@protocol</span> NekiProtokol
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovaMetodaJeObvezna;
&nbsp;
@optional
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovaMetodaJeIstoIzborna;
&nbsp;
@required
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovoJeObveznaMetoda;
&nbsp;
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@protocol</span> DrugiProtokol
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovaMetodaJeIstoObvezna;
&nbsp;
@optional
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ovaMetodaJeIzborna;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Kao što je pokazano u gore navedenom primjeru, deklaracija metoda protokola može biti prazna. To se svojstvo može koristiti za grupiranje objekata koji zadovoljavaju određene kriterije aplikacije.</p>
<p>Identitet klase koja implementira određeni protokol nije bitan. Bitno je jedino provjeriti implementira li neka klasa određeni protokol ili ne. Ako klasa implementira neki protokol, onda ona odgovara tom protokolu.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span> objektOdgovaraNekomProtokolu<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> nekiObjekt
<span style="color: #002200;">&#123;</span>
   <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>nekiObjekt conformsToProtocol<span style="color: #002200;">:</span> <span style="color: #a61390;">@protocol</span> <span style="color: #002200;">&#40;</span>NekiProtokol<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
      <span style="color: #a61390;">return</span> <span style="color: #a61390;">YES</span>;
   <span style="color: #a61390;">else</span>
      <span style="color: #a61390;">return</span> <span style="color: #a61390;">NO</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Korištenje protokola u Objective-C programskom jeziku nije obvezno, ali je vrlo korisno.</p>
<p>Protokoli se mogu primijeniti u različitim slučajevima, kao npr. za deklariranje metoda koje drugi trebaju implementirati. To je od posebnog značaja kod projekata koji se dijele između više programera od kojih se očekuje da implementiraju istu skupinu metoda, ali na različite načine.</p>
<p>Primjer pokazuje protokol nazvan ProtokolKojiSviImplementiraju, a nalzi se u NekiProtokol.h datoteci.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// NekiProtokol.h</span>
&nbsp;
<span style="color: #a61390;">@protocol</span> ProtokolKojiSviImplementiraju
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> vratiA;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> vratiB;
&nbsp;
@optional
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ispisZbroja;
&nbsp;
@required
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> zbroj;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Protokol je implementiran unutar klase na sljedeći način:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">//NekaKlasa.h</span>
&nbsp;
<span style="color: #6e371a;">#import &quot;NekiProtokol.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@interface</span> NekaKlasa <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span> &lt; ProtokolKojiSviImplementiraju &gt;
<span style="color: #002200;">&#123;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//nema deklariranih varijabli</span>
&nbsp;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//nema deklariranih metoda</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Sama klasa nema deklariranih metoda, ali odgovara protokolu čije metode, barem one obvezne, implementira. Metoda ispisZbroja je izborna i ne mora se implementirati.</p>
<p>Metode se mogu implementirati na sljedeći način:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// NekaKlasa.m</span>
&nbsp;
<span style="color: #6e371a;">#import &quot;NekaKlasa.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> NekaKlasa
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> vratiA
<span style="color: #002200;">&#123;</span>
   <span style="color: #a61390;">return</span> <span style="color: #2400d9;">5</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> vratiB
<span style="color: #002200;">&#123;</span>
   <span style="color: #a61390;">return</span> <span style="color: #2400d9;">8</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> zbroj
<span style="color: #002200;">&#123;</span>
   <span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span>self vratiA<span style="color: #002200;">&#93;</span> <span style="color: #002200;">+</span> <span style="color: #002200;">&#91;</span>self vratiB<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> ispisZbroja
<span style="color: #002200;">&#123;</span>
   <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;%d&quot;</span>, <span style="color: #002200;">&#91;</span>self zbroj<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Neka druga klasa koja odgovara istom protokolu ProtokolKojiSviImplementiraju može navedene metode implementirati na drugi način. Protokol se koristi za deklariranje metoda, a ne načina na koji će se te metode implementirati.</p>
<p>Protokoli su korisni i za definiranje objekata čija je klasa sakrivena.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">id</span> &lt; NekiProtokol &gt; nekiObjekt;</pre></div></div>

<p>Klasa ovog objekta u ovom trenutku nije poznata, ali su poznate određene metode koje ovaj objekt implementira zbog protokola na koji odgovara.</p>
<p>Protokoli su vrlo korisni i za pronalaženje sličnosti između klasa koje nisu hijerarhijski povezane jer se klase u različitim granama hijerarhije nasljeđivanja mogu povezati ako odgovaraju istom protokolu.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">Klasa1 <span style="color: #002200;">*</span>objekt1;
Klasa2 <span style="color: #002200;">*</span>objekt2;</pre></div></div>

<p>Ako Klasa1 i Klasa2 implementiraju isti protokol, mogu se smatrati sličnima jer odgovaraju istom protokolu.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.hr/objective-c-protokoli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C: Kategorije</title>
		<link>http://inchoo.hr/objective-c-kategorije/</link>
		<comments>http://inchoo.hr/objective-c-kategorije/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 07:50:34 +0000</pubDate>
		<dc:creator>Luka Gabric</dc:creator>
				<category><![CDATA[iPhone development]]></category>

		<guid isPermaLink="false">http://inchoo.hr/?p=178</guid>
		<description><![CDATA[Objective-C podržava proširivanje klasa pomoću kategorija. Kategorije klase definiraju se slično kao što se definira i sama klasa. U primjeru je definirana klasa MojaKlasa. U &#8220;header&#8221; datoteci klase deklarirane su varijable mojString i mojInt, te metode postaviMojString i postaviMojInt. MojaKlasa.h: @interface MojaKlasa : NadKlasa { NSString *mojString; int mojInt; } - (void) postaviMojString: (NSString*) str; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-180 alignright" style="margin-left: 10px; margin-bottom: 10px;" title="kategorije" src="http://inchoo.hr/wp-content/uploads/2010/02/kategorije.jpg" alt="kategorije" width="287" height="215" />Objective-C podržava proširivanje klasa pomoću kategorija. Kategorije klase definiraju se slično kao što se definira i sama klasa. U primjeru je definirana klasa MojaKlasa. U &#8220;header&#8221; datoteci klase deklarirane su varijable mojString i mojInt, te metode postaviMojString i postaviMojInt.</p>
<p><strong>MojaKlasa.h:</strong></p>
<p><em><span style="color: #3366ff;">@interface </span>MojaKlasa : NadKlasa<br />
{</em></p>
<p style="padding-left: 30px;"><em>NSString *mojString;<br />
int mojInt;</em></p>
<p><em>}</em></p>
<p><em>- (void) postaviMojString: (NSString*) str;<br />
- (void) postaviMojInt: (int) i;</em></p>
<p><em>@end</em></p>
<p>Metode su definirane u implementaciji klase (datoteka MojaKlasa.m), a ne rade ništa drugo nego postavljaju vrijednosti varijabla klase &#8211; mojString i mojInt.</p>
<p><strong>MojaKlasa.m:</strong></p>
<p><em><span style="color: #ff0000;">#import &#8220;MojaKlasa.h&#8221;</span></em></p>
<p><em><span style="color: #3366ff;">@implementation</span> MojaKlasa</em></p>
<p><em>- (void) postaviMojString: (NSString*) str</em></p>
<p><em>{</em></p>
<p style="padding-left: 30px;"><em>mojString = str;</em></p>
<p><em>}</em></p>
<p><em>- (void) postaviMojInt: (int) i<br />
{</em></p>
<p style="padding-left: 30px;"><em>mojInt = i;</em></p>
<p><em>}</em></p>
<p><em><span style="color: #3366ff;">@end</span></em></p>
<p>Slijedi definiranje kategorije klase MojaKlasa. Kategorije klase definiraju se slično kao i sama klasa. Potrebno je uvesti &#8220;header&#8221; datoteku klase koja se proširuje ovom kategorijom. Zatim, kao kod definiranja same klase, slijedi ključna riječ @interface s imenom klase, a u zagradi slijedi naziv kategorije.</p>
<p><strong>KategorijaMojeKlase.h:</strong></p>
<p><em><span style="color: #ff0000;">#import &#8220;MojaKlasa.h&#8221;</span></em></p>
<p><em><span style="color: #3366ff;">@interface</span> MojaKlasa (KategorijaMojeKlase)</em></p>
<p><em>- (NSString*) MetodaUnutarKategorije;</em></p>
<p><em><span style="color: #3366ff;">@end</span></em></p>
<p>&#8220;Source&#8221; datoteka kategorije definira se kao i &#8220;source&#8221; datoteka klase. Potrebno je uvesti &#8220;header&#8221; datoteku kategorije, zatim slijedi ključna riječ @implementation, ime klase te u zagradi ime kategorije. Dalje se definiraju metode isto kao što se definiraju metode u samoj klasi.</p>
<p><strong>KategorijaMojeKlase.m:</strong></p>
<p><em><span style="color: #ff0000;">#import &#8220;KategorijaMojeKlase.h&#8221;</span></em></p>
<p><em><span style="color: #3366ff;">@implementation</span> MojaKlasa (KategorijaMojeKlase)</em></p>
<p><em>- (NSString*) MetodaUnutarKategorije<br />
{</em></p>
<p style="padding-left: 30px;"><em>return @&#8221;Metoda unutar kategorije je izvršena!!&#8221;;</em></p>
<p><em>}</em></p>
<p><em><span style="color: #3366ff;">@end</span></em></p>
<p>Kako bi se instanca klase MojaKlasa mogla napraviti i koristiti unutar neke druge klase potrebno je unutar te druge klase uvesti &#8220;header&#8221; datoteke klase MojaKlasa i kategorije KategorijaMojeKlase.</p>
<p><em><span style="color: #ff0000;">#import &#8220;MojaKlasa.h&#8221;</span></em></p>
<p><em><span style="color: #ff0000;"> </span></em><em><span style="color: #ff0000;">#import &#8220;KategorijaMojeKlase.h&#8221;</span></em></p>
<p><em> </em></p>
<p>Neka instanca klase MojaKlasa ima naziv <span style="color: #339966;"><em>instancaMojeKlase</em></span>. Deklarirane metode možemo pozvati na sljedeći način:</p>
<p>[<span style="color: #339966;"><em>instancaMojeKlase</em></span> <em>postaviMojString</em>:@"Neki string."];</p>
<p>// vrijednost varijable mojString = &#8220;Neki string&#8221;</p>
<p>[<span style="color: #339966;"><em>instancaMojeKlase</em></span> <em>postaviMojInt</em>:123];</p>
<p>// vrijednost varijable mojInt = 123</p>
<p>NSString *nekiString = [<span style="color: #339966;"><em>instancaMojeKlase</em></span> <em>MetodaUnutarKategorije</em>];</p>
<p>// vrijednost varijable nekiString postavlja se pozivanjem metode <em>MetodaUnutarKategorije</em> koja vraća definirani string pa je vrijednost varijable nekiString = <em>&#8220;Metoda unutar kategorije je izvršena!!&#8221;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.hr/objective-c-kategorije/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Uvod u Objective-C</title>
		<link>http://inchoo.hr/uvod-u-objective-c/</link>
		<comments>http://inchoo.hr/uvod-u-objective-c/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 09:14:33 +0000</pubDate>
		<dc:creator>Luka Gabric</dc:creator>
				<category><![CDATA[iPhone development]]></category>

		<guid isPermaLink="false">http://inchoo.hr/?p=141</guid>
		<description><![CDATA[Objective-C je jednostavan programski jezik koji omogućava objektno orijentirano programiranje na visokoj razini. Objective-C predstavlja nadogradnju na standardni ANSI C programski jezik. ANSI C je proširen mogućnostima definiranja klasa, metoda i ostalih sastavnih dijelova koji na dinamičan način mogu proširivati definirane klase. Prije proučavanja Objective-C programskog jezika, potrebno je osnovno poznavanje aspekata programiranja u C [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-142 alignleft" style="margin-right: 15px;" title="demystifying_photo_2" src="http://inchoo.hr/wp-content/uploads/2010/02/demystifying_photo_2.jpg" alt="demystifying_photo_2" width="187" height="140" />Objective-C je jednostavan programski jezik koji omogućava objektno orijentirano programiranje na visokoj razini. Objective-C predstavlja nadogradnju na standardni ANSI C programski jezik. ANSI C je proširen mogućnostima definiranja klasa, metoda i ostalih sastavnih dijelova koji na dinamičan način mogu proširivati definirane klase. Prije proučavanja Objective-C programskog jezika, potrebno je osnovno poznavanje aspekata programiranja u C programskom jeziku. Objective-C podržava i većinu standardnih objektno-orijentiranih koncepata, s određenim razlikama, kao što su enkapsulacija, nasljeđivanje i polimorfizam.</p>
<p><strong>Objective-C i ANSI C</strong></p>
<p>Objective-C je programski jezik koji predstavlja proširenje ANSI C programskog jezika. Iz tog razloga zadržava osnovnu C sintaksu. Osim sintakse, podržana je i C struktura datoteka, s &#8220;header&#8221; i &#8220;source&#8221; datotekama,  kako bi se razdvojile opće dostupne deklaracije od implementacije same klase, odnosno koda. &#8220;Header&#8221; datoteke imaju ekstenziju .h, a &#8220;source&#8221; datoteke imaju ekstenziju .m, ako se radi o isključivo Objective-C sintaksi, te ekstenziju .mm, ako se radi o kombinaciji Objective-C i C/C++ sintakse.</p>
<p><strong>Klase</strong></p>
<p>Kao i kod većine drugih objektno orijentiranih programskih jezika, klasa u Objective-C programskom jeziku predstavljaju opis neke strukture podataka s određenim metodama koje se mogu primijeniti na podatcima u strukturi. Klasa je definirana s dva sastavna dijela: interface i implementacija. Interface klase sadrži deklaracije klase, definira varijable i metode. &#8220;Header&#8221; datoteka sadrži interface klase i najčešće koristi ekstenziju &#8220;.h&#8221;. Implementacija klase sadrži kod metoda klase. Objekt predstavlja instancu klase koja se kreira prilikom pokretanja aplikacije. Objekt sadrži instance varijabli i pokazivače na metode deklarirane unutar klase.</p>
<p>Na slici je prikazana deklaracija klase MojaKlasa, koja nasljeđuje klasu NadKlasa. Deklaracija klase uvijek započinje instrukcijom <em>@interface</em>, a završava s @end. Varijable instance se deklariraju unutar vitičastih zagrada. Na kraju se deklariraju metode klase.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-161" title="interface_primjer" src="http://inchoo.hr/wp-content/uploads/2010/02/interface_primjer.png" alt="interface_primjer" width="496" height="303" /></p>
<p style="text-align: center;">
<p><strong>Metode</strong></p>
<p>Klasa u Objective-C programskom jeziku može imati dvije vrste metoda: metode instance i metode klase. Metoda instance predstavlja metodu koju izvršava objekt, odnosno instanca klase. Drugim riječima, prije pozivanja metode instance mora se prvo napraviti instanca klase. Za razliku od metoda instance, za pozivanje metoda klase nije potrebno stvoriti instancu klase. Na slici su prikazane dvije metode. Minusom se u Objective-C programskom jeziku označava metoda instance, a plusom metoda klase. Zatim slijedi tip varijable koju metoda vraća. Na slici su to metode koje vraćaju vrijednost (id) u jednom slučaju, a u drugom slučaju metoda ne vraća vrijednost (void). Zatim slijede ključne riječi metode, te tipovi i imena parametara ako postoje.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.hr/uvod-u-objective-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zapošljavamo iPhone developera!</title>
		<link>http://inchoo.hr/zaposljavamo-iphone-developera/</link>
		<comments>http://inchoo.hr/zaposljavamo-iphone-developera/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 12:14:08 +0000</pubDate>
		<dc:creator>Ivan Kalaica</dc:creator>
				<category><![CDATA[iPhone development]]></category>

		<guid isPermaLink="false">http://inchoo.hr/?p=120</guid>
		<description><![CDATA[Zbog velikog interesa klijenata za razvoj iPhone aplikacija otvaramo novo radno mjesto u Inchoo na mjestu programera iPhone aplikacija. Više informacija o iPhone developmentu možete pronaći na Apple Developer Connection siteu. Potrebna je registracija kako biste vidjeli dostupne materijale i video tutoriale. Od kandidata je potrebno izvrsno poznavanje objektnog programiranja, baza podataka, engleskog jezika, izrazita [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-130" title="iphone" src="http://inchoo.hr/wp-content/uploads/2010/01/iphone.jpg" alt="iphone" width="278" height="186" /></p>
<p>Zbog velikog interesa klijenata za razvoj iPhone aplikacija otvaramo novo radno mjesto u Inchoo na mjestu programera iPhone aplikacija.</p>
<p>Više informacija o iPhone developmentu možete pronaći na Apple Developer Connection siteu. Potrebna je registracija kako biste vidjeli dostupne materijale i video tutoriale. Od kandidata je potrebno izvrsno poznavanje objektnog programiranja, baza podataka, engleskog jezika, izrazita želja za učenjem te sklonost timskom radu. Pošto je iPhone development novija tehnologija, očekivan je period učenja novog kandidata.</p>
<p>Sve zainteresirane kandidate molimo da se prijave što je prije moguće jer prijave traju do 21.01.2010. Prijave za natječaj možete obaviti na:</p>
<p><a href="http://www.moj-posao.net/posao/IPhone-developer-mf-Osijek/386aa0139940d1be5d9d1926c1bb8053.htm">www.moj-posao.net</a><br />
<a href="http://www.posao.hr/oglasi/iphone-developer-m-f/228696/">www.posao.hr</a></p>
<p>Sretno! <img src='http://inchoo.hr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.hr/zaposljavamo-iphone-developera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uvod u iPhone programiranje</title>
		<link>http://inchoo.hr/uvod-u-iphone-programiranje/</link>
		<comments>http://inchoo.hr/uvod-u-iphone-programiranje/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 10:09:37 +0000</pubDate>
		<dc:creator>Hrvoje Jurišić</dc:creator>
				<category><![CDATA[iPhone development]]></category>

		<guid isPermaLink="false">http://inchoo.hr/?p=6</guid>
		<description><![CDATA[Kao uvod u ovaj i sve ostale postove koji će biti objavljeni na ovom blogu želio bih napisati par rečenica o tome zbog čega sam se odlučio na bloganje o iPhone programiranju i naravno nešto o meni. Kako bih pridonio i pomogao da se poveća broj iPhone programera u Hrvatskoj odlučio sam pisati o razvoju [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://inchoo.hr/wp-content/uploads/2009/11/iphone.jpg" alt="iphone" title="iphone" width="510" height="186" class="alignnone size-full wp-image-10" /></p>
<p>Kao uvod u ovaj i sve ostale postove koji će biti objavljeni na ovom blogu želio bih napisati par rečenica o tome zbog čega sam se odlučio na bloganje o iPhone programiranju i naravno nešto o meni. Kako bih pridonio i pomogao da se poveća broj iPhone programera u Hrvatskoj odlučio sam pisati o razvoju aplikacija za iPhone i na hrvatskom jeziku. Moje ime je Ivan Kalaica i mogu ponosno reci da sam zaposlenik tvrtke imenom Inchoo.</p>
<p>Inchoo je tvrtka čije je glavna djelatnost razvoj online trgovina (os-commerce) i iPhone aplikacija te je kao takva prva u Hrvatskoj. Što se tiče razvoja iPhone aplikacija Inchoo surađuje s američkom tvrtkom Surgeworks preko koje i dobiva uglavnom sve iPhone projekte. Za sada sam jedini zaposlenik koji se bavi iPhone programiranjem i nadam se da ce se broj takvih u Inchoo-u uskoro povećati.</p>
<p>Za programiranje iPhone i iPod Touch aplikacija prije svega potreban vam je Mac. Nakon što uspješno instalirate iPhone SDK ( koji je dostupan na iPhone Dev Center ) spremni ste za novi izazov a to je naravno učenje. Za instalaciju iPhone SDK Apple od vas zahtjeva da se registrate kao developer na Apple-ovm iPhone Dev Center-u.</p>
<p>Kao uvod u ovaj prvi članak o iPhone programiranju pokusati cu ukratko objasniti alate i pojmove kojima ćete se koristiti odnosno susretati te okruženje u kojem ćete proizvoditi iPhone i iPod Touch aplikacije. Okruženje i glavni alat u kojemu se razvijaju aplikacije naziva se Xcode. Kako i sami znate programski jezik kojime ćete se koristiti u ovu svrhu jest Objective-C a naziv framework-a kojim ćete te se uglavnom koristiti je CocoaTouch. Naravno tu je i Interface Builder (WYSIWYG) alat koji ce vam uvelike olakšati posao kreiranje grafičkog sučelja.</p>
<p>Osim svega navedenog na raspolaganju imate i alat pod nazivom Instruments pomoću kojega ćete provjeravati zauzeće ili curenje memorije vaše aplikacije, količinu alokacije vaših objekata itd. Naime, kod razvoja aplikacija za iPhone bitno je znati da se morate pobrinuti sami za destrukciju ili otpuštanje svih alociranih objekata. Možda je sada vaše mišljenje negativno te da je to veliki nedostatak ali nakon što krenete programirati svoje prve aplikacije shvatiti ćete da je to zapravo jako velika prednost osobito ako vam je ovo prvi doticaj s OOP. Samo razumjevanje načina kako sustav kreira, sto čini s memorijom i kako reagira uvelike ce vam pomoći kod traženja i na koncu nalaženja pogrešaka (debugging).</p>
<p>Za testiranje vaših aplikacija možete koristiti iPhone Simulator. Nije vam nužno potreban sam iPhone uređaj ali svakako je preporučljivo da ga imate u svrhu testiranja jer neke dodatne mogućnosti ipak simulator (ma koliko dobar bio) ne može “odglumiti”. SDK je besplatan kao takav i on vam može biti dovoljan za programiranje ali aplikacije ne možete instalirati niti na jedan iPhone uređaj. Za tu svrhu ili za prodaju aplikacije potrebno je platiti Apple-u minimalno 99$ kako bih se logirati na Program Portal preko kojega se vrši predaja same aplikacije na App Store i prije svega dobiva dozvola za instaliranje aplikacije na vas iPhone u svrhu testiranja.</p>
<p>Zanimljivo kako je Apple osmislio strukturu samog poslovanja tj. način na koji se pruža usluge krajnjem kupcu aplikacija te uloga i (ne)obaveza programera kao vlasnika aplikacije. Vas zadatak je kreirati aplikaciju, postavite svoje uvijete prodaje (cijenu), postavite kategoriju aplikacije, predate je Apple-u putem vašeg korisničkog računa na Program Portal-u i naravno nakon toga čekate odobrenje. Nakon sto je Apple odobri i prodaja krene vi dobivate 70% od cijene vašeg proizvoda.</p>
<p>AppStore je dio iTunes-a gdje se nalaze sve iPhone aplikacije. To je mjesto gdje se vlasniku aplikacije daje mogućnost prodaje ili besplatne predaje aplikacije korisnicima. Kupci aplikacije mogu komentirati i ocijeniti pojedine aplikacije te na taj način pridonijeti marketingu vašeg proizvoda.</p>
<p>Apple se i ovaj put pobrinio za svoje iDevelopere te svu potrebnu literaturu, primjere koda i još mnogo toga objavio na svom iPhone Dev Center portalu što uvelike pomaze samom postupku učenja. Svi materijali su dostupni nakon registracije koja je besplatna. Sada kada imate pristup iPhone Dev Center-u za početak učenja preporučio bih vam da prvo krenete s učenjem programskog jezika, odnosno Objective-C. Objective-C je jednostavni programski jezik dizajniran da omogući sofisticirano objektno orijentirano programiranje. Objective-C je zapravo proizlazi iz standardnog ANSI C programski jezika i proširuje ga sa sintaksom za definiranje klasa, metoda i ostalih struktura koje cine jedinstveni objektno orijentirani model.</p>
<p>Kada savladate osnovne principe koje se koriste za kreiranje programa u Objective-C možete se prebaciti na knjigu iPhone Application Programming Guide gdje ćete naci upute za kreiranje vase prve aplikacije sa primjerima koda. Ubrzo nakon toga shvatiti ćete sintaksu ovog programskog jezika te počnite s detaljnijim proučavanjem CocoaTouch framework-a. Naravno, osnovne informacije koje svaki iPhone programer mora znati naći ćete u Cocoa Fundamentals Guide knjizi koja se prije svega preporučuje i za Mac OSX sustave. Ova knjiga obuhvaća osnove Objective-C programskog jezika, programerske konvencije i dizajn patterne koje koristi UIKit i mnogi ostali frameworks-i. Mislim da je za početak vašeg učenja a i mog bloganja ovo sasvim dovoljno. Sretno!</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.hr/uvod-u-iphone-programiranje/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Povijest Objective C programskog jezika</title>
		<link>http://inchoo.hr/povijest-objective-c-programskog-jezika/</link>
		<comments>http://inchoo.hr/povijest-objective-c-programskog-jezika/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 10:07:07 +0000</pubDate>
		<dc:creator>Hrvoje Jurišić</dc:creator>
				<category><![CDATA[iPhone development]]></category>

		<guid isPermaLink="false">http://inchoo.hr/?p=3</guid>
		<description><![CDATA[Objective-C je jednostavni programski jezik dizajniran da omogući sofisticirano objektno orijentirano programiranje. Objective-C je zapravo proizlazi iz standardnog ANSI C programski jezika i proširuje ga sa sintaksom za definiranje klasa, metoda i ostalih struktura koje cine jedinstveni objektno orijentirani model. Dizajner Objective-C programskog jezika je Brad J. Cox u ranim 1980-ih. Jezik je zasnovan na [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-4" title="objective c" src="http://inchoo.hr/wp-content/uploads/2009/11/objective-c.jpg" alt="objective c" width="510" height="186" /></p>
<p>Objective-C je jednostavni programski jezik dizajniran da omogući sofisticirano objektno orijentirano programiranje. Objective-C je zapravo proizlazi iz standardnog ANSI C programski jezika i proširuje ga sa sintaksom za definiranje klasa, metoda i ostalih struktura koje cine jedinstveni objektno orijentirani model. Dizajner Objective-C programskog jezika je Brad J. Cox u ranim 1980-ih.</p>
<p>Jezik je zasnovan na strukturi tada već poznatog programskog jezika Smalltalk-80. Naime, Objective-C je na vrhu slojevite strukture programskog jezika C, što znači da se dodavanjem ekstenzija proceduralnom programskom jeziku stvorio novi programski jezik u kojemu je omogućeno manipuliranje predmetima na principu jednostavnog objektnog modela.</p>
<p>1988. godine tvrtka NeXT Software licencira Objective-C sa osnovnim skupom libary-a, te razvija razvojno okruženje imena NEXTSTEP. Nedugo nakon toga, 1992. Objective-C ulazi u skupinu Free Software Foundation’s GNU razvojnih okruženja. Godine 1994 NeXT Computer i Sun Microsystems izdaje standardiziranu specifikaciju i dokumentaciju NEXTSTEP razvojnog sustava koja se zove OPENSTEP. Free Software Foundation verzija OPENSTEP-a zove se GNUStep. Postoji također i Linux verziju koja uključuje i Linux kernel te razvojno okruženje GNUStep tipa koje se zove LinuxSTEP.</p>
<p>20. prosinca 1996. Apple Computer objavljuje da su upravo NeXT Software i NEXTSTEP/OPENSTEP razvojna okruženja postali glavni temelji za buduća velika izdanja Apple-ovih OS X sustava. Apple-ova verzija razvojnog okruženja postaje Cocoa sa ugrađenom podrškom za Objective-C programski jezik te programskim alatima kao sto su Project Builder (danas zvan Xcode) i Interface Builder. I tako je nastalo močno razvojno okruzenje (u pravom smislu riječi) za razvoj aplikacija na Mac OS X-u.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.hr/povijest-objective-c-programskog-jezika/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
