<?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>Out Of Memory &#187; objective-c</title>
	<atom:link href="http://www.outofmemory.blog.br/tag/objective-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.outofmemory.blog.br</link>
	<description>Blog sobre tecnologia, seriados, esportes, jogos e coisas nerds</description>
	<lastBuildDate>Wed, 23 Jun 2010 14:18:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Introdução ao Objective-C &#8211; Synthesized Accessor</title>
		<link>http://www.outofmemory.blog.br/2010/04/29/introducao-ao-objective-c-synthesized-accessor/</link>
		<comments>http://www.outofmemory.blog.br/2010/04/29/introducao-ao-objective-c-synthesized-accessor/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 03:03:02 +0000</pubDate>
		<dc:creator>Alex Chiaranda</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[accessor]]></category>
		<category><![CDATA[getter]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[memória]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[setter]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://www.outofmemory.blog.br/?p=396</guid>
		<description><![CDATA[Quem programa utilizando Orientação a Objetos sabe bem a importância de criar os atributos de uma classe como private e criar os &#8220;Accessors&#8221; para alterar ou recuperar os valores desses atributos; o Objective-C 2.0 disponibiliza uma maneira muito simples e prática para isso, os &#8220;Synthesized Accessor Methods&#8220;.

Quando estamos falando de mobile devices (iPhone/iPad) deve-se levar [...]]]></description>
			<content:encoded><![CDATA[<p>Quem programa utilizando Orientação a Objetos sabe bem a importância de criar os atributos de uma classe como private e criar os &#8220;<strong>Accessors</strong>&#8221; para alterar ou recuperar os valores desses atributos; o Objective-C 2.0 disponibiliza uma maneira muito simples e prática para isso, os &#8220;<strong>Synthesized Accessor Methods</strong>&#8220;.<br />
<span id="more-396"></span><br />
Quando estamos falando de mobile devices (iPhone/iPad) deve-se levar em conta o consumo de memória, e pensando nisso um bom accessor para um atributo <strong>nome</strong> seria mais ou menos assim:</p>
<pre class="brush: cpp;">
- (void) setNome: (NSString *) _nome
{
   [nome release];
   nome = [[NSString alloc] initWithString: _nome];
}

- (NSString *) nome
{
   return nome;
}
</pre>
<p>antes de fazer o set do novo valor, o valor antigo é liberado da memória evitando &#8220;<strong>vazamentos</strong>&#8221; indesejáveis.</p>
<p>Para que o compilador realize essa tarefa, nos poupando muito trabalho, primeiro você declara o atributo utilizando a diretiva &#8220;<strong>@property</strong>&#8221; na sua interface, e depois na implementação da classe utilizar a diretiva &#8220;<strong>@synthesize</strong>&#8220;. Desse modo o compilador vai gerar automaticamente o &#8220;<strong>getter</strong>&#8221; e o &#8220;<strong>setter</strong>&#8221; do seu atributo.</p>
<p>Nada melhor que um exemplo, vamos começar com a interface &#8220;MyClass1.h&#8221;:</p>
<pre class="brush: cpp;">
#import  &lt;Foundation/Foundation.h&gt;

@interface MyClass1 : NSObject
{
   int aInt;
   NSString *nome;
}

@property int aInt;
@property (copy, nonatomic) NSString *nome;

@end
</pre>
<p>a diretiva &#8220;<strong>@property</strong>&#8221; aceita alguns parâmentros para informar ao compilador como criar o &#8220;<strong>Accessor</strong>&#8220;, no nosso caso queremos que seja feita uma cópia no setter do atributo (como no exemplo acima), então usamos o parâmetro &#8220;<strong>copy</strong>&#8220;, e ainda o &#8220;<strong>nonatomic</strong>&#8221; pois não queremos que o getter faça um &#8220;<strong>retain</strong>&#8221; ou um &#8220;<strong>autorelease</strong>&#8221; antes que ele retorne o valor do atributo (mais sobre o &#8220;<strong>retain</strong>&#8221; e o &#8220;<strong>autorelease</strong>&#8221; nos próximos artigos).</p>
<p>agora o &#8220;MyClass1.m&#8221;:</p>
<pre class="brush: cpp;">
#import &quot;MyClass1.h&quot;

@implementation MyClass1

@synthesize aInt;
@synthesize nome;

@end
</pre>
<p>não está faltando código, é só isso mesmo.</p>
<p>e finalmente um programa que faz a chamada:</p>
<pre class="brush: cpp;">
#import &lt;Foundation/Foundation.h&gt;
#import &quot;MyClass1.h&quot;

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

   MyClass1 * m = [[MyClass1 alloc] init];

   [m setAInt: 5];
   NSLog(@&quot;Valor eh: %i&quot;, [m aInt]);

   [m setNome: @&quot;Alex&quot;];
   NSLog(@&quot;Nome eh: %s&quot;, [[m nome] UTF8String]);

   [m release];
   [pool drain];
   return 0;
}
</pre>
<p>você deve ter notado, que nas chamadas eu utilizei &#8220;<strong>setAInt</strong>&#8221; e &#8220;<strong>setNome</strong>&#8221; para setar os valores e &#8220;<strong>aInt</strong>&#8221; e &#8220;<strong>nome</strong>&#8221; para recuperar os valores, o &#8220;<strong>@synthesize</strong>&#8221; criou esses métodos na hora da compilação, mas se você utiliza o XCode, ficará surpreso em saber que ele oferece no auto-complete esses métodos.</p>
<p>após compilar e rodar a saída que obtive foi essa:</p>
<pre class="brush: plain;">
2010-04-28 23:24:13.552 acessor[1217:a0f] Valor eh: 5
2010-04-28 23:24:13.554 acessor[1217:a0f] Nome eh: Alex
</pre>
<p>Até o próximo artigo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofmemory.blog.br/2010/04/29/introducao-ao-objective-c-synthesized-accessor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução ao Objective-C &#8211; parte 1</title>
		<link>http://www.outofmemory.blog.br/2009/10/19/introducao-ao-objective-c-parte-1/</link>
		<comments>http://www.outofmemory.blog.br/2009/10/19/introducao-ao-objective-c-parte-1/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 19:06:50 +0000</pubDate>
		<dc:creator>Alex Chiaranda</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.outofmemory.blog.br/?p=325</guid>
		<description><![CDATA[Se você pretende desenvolver para MacOS e/ou iPhone, você deve ter levado em consideração aprender a programar em Objective-C. A boa notícia (talvez não para todos) é que Objective-C é muito parecida com C/C++ e Java, o que com certeza agiliza o aprendizado.
Não é o objetivo desse artigo, contar como ou porque a linguagem surgiu, [...]]]></description>
			<content:encoded><![CDATA[<p>Se você pretende desenvolver para MacOS e/ou iPhone, você deve ter levado em consideração aprender a programar em Objective-C. A boa notícia (talvez não para todos) é que Objective-C é muito parecida com C/C++ e Java, o que com certeza agiliza o aprendizado.</p>
<p>Não é o objetivo desse artigo, contar como ou porque a linguagem surgiu, mas se quiser informações a respeito, a página do Objective-C no <a title="Objective-C" href="http://en.wikipedia.org/wiki/Objective-C" target="_blank">Wikipedia</a> é um bom lugar para começar.</p>
<p><span id="more-325"></span><br />
Vamos começar mostrando como se invoca um método. Na verdade, em Objective-C um método não é invocado, o que acontece é que você envia uma &#8220;mensagem&#8221; para um objeto,  e ele se encarrega de responder de maneira apropriada (mais sobre isso nos próximos artigos).</p>
<p>em Java:</p>
<pre class="brush: java;">
user.doSomething();
user.setName(&quot;Alex&quot;);
</pre>
<p>em C:</p>
<pre class="brush: cpp;">
doSomething();
setName(&quot;Alex&quot;);
</pre>
<p>em Objective-C:</p>
<pre class="brush: cpp;">
[user doSomething];
[user setName:@&quot;Alex&quot;];
</pre>
<p>Como podem ver, apesar da sintaxe ser um pouco diferente, a chamada é bem intuitiva, a diferença é que ao invés de se chamar &#8220;objeto.metodo&#8221; (que também é suportado), usa-se a chamada entre colchetes com espaço &#8220;[objeto metodo:parametro]&#8220;.</p>
<p>Se para &#8220;enviar uma mensagem&#8221; para um objeto é um pouco diferente, associar o retorno é tão simples quanto nas outras linguagens:</p>
<p>Em &#8220;C++&#8221; seria algo assim:</p>
<pre class="brush: cpp;">
string name = user.getNome();
</pre>
<p>Em &#8220;Objective-C&#8221;:</p>
<pre class="brush: cpp;">
NSString *name = [NSString string];
name = [user nome];
[name release];
</pre>
<p>No exemplo acima, a string &#8220;nome&#8221; é alocada, o valor contido na proprieda &#8220;nome&#8221; do objeto &#8220;user&#8221; é associado a nossa string e então nossa string é desalocada.</p>
<p>Bom, agora que já fizemos o primeiro contato com a linguagem, no próximo artigo veremos como declarar e implementar classes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofmemory.blog.br/2009/10/19/introducao-ao-objective-c-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retomando atividade</title>
		<link>http://www.outofmemory.blog.br/2009/10/15/retomando-atividade/</link>
		<comments>http://www.outofmemory.blog.br/2009/10/15/retomando-atividade/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 21:12:58 +0000</pubDate>
		<dc:creator>Alex Chiaranda</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Filmes]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Jogos]]></category>
		<category><![CDATA[movies]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.outofmemory.blog.br/?p=322</guid>
		<description><![CDATA[Olá pessoal, é verdade que desde que o meu filho nasceu eu não posto nada, mas agora é hora de voltar a atividade.
Estou preparando uma série de posts sobre Objective-C e iPhone, alguma coisa do Wave, agora que a versão alpha foi liberada e outros assuntos interessantes e relacionados a tecnologia, jogos e filmes.
Se tiver [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, é verdade que desde que o meu filho nasceu eu não posto nada, mas agora é hora de voltar a atividade.</p>
<p>Estou preparando uma série de posts sobre Objective-C e iPhone, alguma coisa do Wave, agora que a versão alpha foi liberada e outros assuntos interessantes e relacionados a tecnologia, jogos e filmes.</p>
<p>Se tiver sugestões para Posts e tópicos, entre em contato.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofmemory.blog.br/2009/10/15/retomando-atividade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Posts sobre desenvolvimento para MacOS e iPhone / iPodTouch</title>
		<link>http://www.outofmemory.blog.br/2009/02/06/posts-sobre-desenvolvimento-para-macos-e-iphone-ipodtouch/</link>
		<comments>http://www.outofmemory.blog.br/2009/02/06/posts-sobre-desenvolvimento-para-macos-e-iphone-ipodtouch/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 12:40:26 +0000</pubDate>
		<dc:creator>Alex Chiaranda</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.outofmemory.blog.br/?p=199</guid>
		<description><![CDATA[Nas próximas semanas, vou começar a postar sobre desenvolvimento utilizando Objective-C e framework Cocoa para MacOS e iPhone/iPod Touch.
Se você tem interesse ou curiosidade sobre esses assuntos, não percam os próximos posts !!!
]]></description>
			<content:encoded><![CDATA[<p>Nas próximas semanas, vou começar a postar sobre desenvolvimento utilizando Objective-C e framework Cocoa para MacOS e iPhone/iPod Touch.<br />
Se você tem interesse ou curiosidade sobre esses assuntos, não percam os próximos posts !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofmemory.blog.br/2009/02/06/posts-sobre-desenvolvimento-para-macos-e-iphone-ipodtouch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
