Objota O mundo orientado a objetos

Classe com o Design Pattern Singleton no Objective-C

Posted on setembro 13, 2012

Posted by Pedro

Galera segue ai um exemplo simples para quem tem dúvidas de como criar uma classe no Design Pattern Singleton utilizando Objective-C.


//arquivo Exemplo.h

@interface Exemplo : NSObject {
    
    NSInteger propriedade;
    
}

@property(nonatomic, assign) NSInteger propriedade;

+ (Exemplo *)shared;

@end

Abaixo o código do arquivo Exemplo.m


//arquivo Exemplo.m

#import "Exemplo.h"

static Exemplo *_shared = nil;

@implementation Exemplo

@synthesize propriedade;

+ (Exemplo *)shared {
    
	if(_shared == nil){
		
		@synchronized([Exemplo class]){
			_shared = [[Exemplo alloc] init];
		}
		
	}
	
	return _shared;
	
}

- (id)init{
    
    self = [super init];
    
    if (self) {
        propriedade = 10;
    }
    
    return self;
    
}

@end


//Chamando o objeto estático

[Exemplo shared].propriedade = 20;

Espero que seja útil pra vocês. Até a próxima!

Animação fadeIn com UIView

Posted on setembro 13, 2012

Posted by Pedro

Um exemplo simples para realizar a animação de um UIView.

Básicamente criamos uma instancia da Classe UIView e adicionamos ela a ViewController. Após isso aplicamos uma animação de fadein de 2.0 segundos.

Importante lembrar que esse código deve ir dentro do método - (void)viewDidLoad do ViewController

Obs: Isso é um exemplo simples, pois você pode usar diversas outras propriedades que também irá funcionar, como por exemplo: frame, alpha, transform (bastante usado em caso de animação 3D). Outras opções também podem ser adicionadas a animação, como por exemplo um seletor para quando terminar a animação, para quando iniciar a animação, EasyIn, EasyOut, transição, etc.



UIView *minhaView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)] autorelease];
minhaView.backgroundColor = [UIColor redColor];

[self.view addSubview:minhaView];

minhaView.alpha = 0.0;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];

minhaView.alpha = 1.0;

[UIView commitAnimations];



Até a próxima galera!

Utilizando objeto UIView do framework UIkit

Posted on janeiro 6, 2012

Posted by Rodrigo Ireno

A UIView é um objeto visual genérico previsto no framework UIKit. Por tanto qualquer objeto visivel na tela é um UIView ou extende-se a esta classe.
Exemplificando abaixo existe uma implementação com o UIView.

- (void)viewDidLoad
{
 [super viewDidLoad];

 UIView * objetoVisual = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 300, 60)];

 objetoVisual.backgroundColor = [UIColor redColor];

 [self.view addSubview:objetoVisual];

 [objetoVisual release];
}

O UIKit provê uma interface bem definida de objetos, sendo todos focados em suas respectivas funções. Como exemplo: O UIImage, responsável por carregar os dados de uma imagem na memória, e o UIImageView sendo responsável por mostrar a imagem na tela.

Com base nisso podemos concluir (a grosso modo) que todo objeto do UIKit terminado em View faz uso da interface da classe UIView, que mostra objetos na tela. Ironicamente o UIImageView não utiliza o UIView como base, pois é processado de forma diferente por ser uma simples imagem.
Um UIView pode conter "n" elementos visuais dentro dele, ou seja, outros UIView's. Abaixo segue uma implementação com o uso de SubViews (Elementos visuais dentro de outro elemento visual)


- (void)viewDidLoad
{
 [super viewDidLoad];

 UIView * objetoVisual = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 300, 60)];
 objetoVisual.backgroundColor = [UIColor redColor];

 UIView * subElemento = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 200, 40)];
 subElemento.backgroundColor = [UIColor blueColor];

 [objetoVisual addSubview:subElemento];

 [self.view addSubview:objetoVisual];

 [objetoVisual release];
 [subElemento release];
}

Nota: É muito interessante checar a documentação, pois ela possui uma boa definição de toda a interface, sendo alguns casos exemplificados com implementações.

Terminamos por aqui, bons estudos.

WBProgressView – Barra de progresso personalizada para iPhone / iPad

Posted on janeiro 31, 2011

Posted by Pedro

Contribuindo ai para o conhecimento de vocês leitores do objota, quero apresentar para vocês a WBProgressView. Esse componente foi criado por mim para facilitar na criação de barras personalizadas de load na aplicação. Nesse POST eu vou mostrar como usar esse componente e como personalizar caso necessário.

Os arquivos que compõem esse componente são:
WBProgressView.h
WBProgressView.m
ativo-bar.png
inativo-bar.png

Para usar o componente é preciso basicamente importar a classe, informar a imagem do estado ativo e a imagem do estado inativo.
Então vamos ao exemplo:

Primeiramente crie um projeto com o nome de ProgressBar. Logo depois declare a variável dentro do .h( ProgressBarViewController.h) do nosso viewController principal:


#import <UIKit/UIKit.h>
#import "WBProgressView.h"

@interface ProgressBarViewController : UIViewController {
	WBProgressView *progress;
}

@end

Agora no arquivo .m (ProgressBarViewController.m) deixe exatamente como embaixo. Nós vamos fazer com que a barra seja atualizada a cada 1 segundo, adicionando mais 1 a cada passagem.

//Não esqueça de colocar as imagens do componente dentro do seu projeto.

#import "ProgressBarViewController.h"

@implementation ProgressBarViewController

- (void)viewDidLoad {

        [super viewDidLoad];

        progress = [[WBProgressView alloc] initWithFrame:CGRectMake(10, 10, 400, 14)];
	progress.tileActive = [UIImage imageNamed:@"ativo-bar.png"];
	progress.tileInactive = [UIImage imageNamed:@"inativo-bar.png"];
	progress.max = 20.0;
	progress.min = 5.0;
	progress.value = 5.0;

	[self.view addSubview:progress];

	[progress release];

	[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(addValue) userInfo:nil repeats:NO];

}

- (void)addValue {

	if(progress.value != 20.0){

		progress.value += 0.5;
		[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(addValue) userInfo:nil repeats:NO];

	}

}

- (void)dealloc {
    [super dealloc];
    [progress release];
}

@end

Na classe NSTimer falamos para executar um determinado método a cada 1 segundo. Na propriedade max da classe WBProgressView serve para setar qual o valor máximo que o progress irá receber e em min o valor mínimo.

Caso queira personalizar a imagem do load, é só você trocar essas imagens de ativo e inativo por uma imagem que você quer :)...

Agora é só executar o programa e ver o resultado.

Pronto!!! É apenas isso. Simples não?
Qualquer dúvida ou sugestão postem por favor.

Até a próxima.

arquivos do post

Delegate Objective-C de uma forma simples e direta

Posted on janeiro 10, 2011

Posted by Pedro

Bom, o que quero apresentar para vocês nesse POST é como utilizar delegate de uma forma direta. Haa mas como seria isso? Simples, vou apresentar um exemplo prático. Então mão na massa!

Bom primeiramente vou colocar aqui para vocês um problema simples, imagine as Classes A, B, C e D.
Nesse contexto as classes B, C e D possuem uma instancia da classe A, e dentro da classe A possui um "evento" de Print, que irá imprimir na tela uma String, porém antes de ser impresso esse texto eu tenho que avisar as classes que implementarão A que eu irei realizar essa ação, mas eu não conheço as classes que estão esperando receber esse "evento", então como resolver esse problema?

Então é ai que entra os delegates, que para quem já programa em JAVA vai entender que não passa de um tipo de Listener usado de uma forma diferente.

A criação de um delegate é realizado através da declaração @protocol no arquivo .h onde também é declarada a Classe.

Então vamos ao exemplo. Primeiramente crie um projeto View-based Application no seu Xcode com o nome de TesteDelegate.

Após criar o projeto vamos criar as classes A, B e C dentro da pasta Classes, clicando com o botão direito encima dela e escolhendo a opção Add -> New File. Feito isso vamos criar um método na classe A ( arquivo A.h ) chamado printString.

E dentro desse arquivo, vamos criar também o protocolo da nossa classe da forma apresentada abaixo, depois irei explicar o que faz cada comando.

//A.h
#import <Foundation/Foundation.h>

@protocol ADelegate <NSObject>

@required
- (void)didPrint;

@optional
- (void)willPrint;

@end

@interface A : NSObject {

	id <ADelegate>delegate;

}

@property(nonatomic, retain) id <ADelegate>delegate;

- (void)printString;

@end

//A.m
#import "A.h"

@implementation A

@synthesize delegate;

- (void)printString {

	if ([delegate respondsToSelector:@selector(willPrint)]) {
		[delegate willPrint];
	}

	NSLog(@"Escreveu a String");

	[delegate didPrint];

}

- (id) init {

	self = [super init];

	if (self != nil) {
		delegate = nil;
	}

	return self;

}

@end

Na classe A nós criamos um protocolo chamado ADelegate, esse protocolo é o delegate em si, e como vocês podem ver na declaração nós tipamos o Protocolo como NSObject para dessa forma usar os métodos da classe NSObject.

Embaixo vocês irão encontrar os métodos didPrint com o indicador @required (que serve apenas para informar que o método é de obrigatória implementação pela classe que será responsável pelo delegate) e willPrint com o indicador @optional (serve para indicar que o método não precisar ser implementado, é opcional).

Agora na @interface da classe A declaramos a variavel delegate do tipo id (tipo de dado genérico no Objective-c). Essa variável irá receber a classe que será responsável pelo delegate. Logo embaixo declaramos a propriedade (prometo que irei fazer um post sobre propriedades no objective-c) para o delegate e dessa forma conseguir enxergar essa variável a partir de outras classes.

Feito isso implementamos o método printString, Nesse método temos algumas coisas importantes para falar.

if ([delegate respondsToSelector:@selector(willPrint)]) {
     [delegate willPrint];
}

Nesse if eu verifico se o objeto delegate (que eu não sei de onde vem e quem é, só sei que deriva do NSObject, por esse motivo eu tipei esse protocolo como NSObject) responde ao método willPrint, essa verificação básicamente "olha" se a classe possui esse método implementado, se sim, eu acho o método, se não ele passa direto.

Essa é a forma que posso tornar meu método de implementação opcional.

Já na linha:

[delegate didPrint];

Caso não esteja implementado o método na classe que está setada como delegate irá gerar um erro na execução do programa.

Dessa forma eu torno o método de implementação obrigatória.

Classe B:

Na classe B é criado uma instância da classe A e setado o delegate da classe A como self (self é o mesmo que this usado nas linguagens como java, php, javascript, etc) para que a classe B seja responsável por receber os eventos (ou mensagens) enviados da classe A.

O mesmo é criado na classe C.

//B.h
#import <Foundation/Foundation.h>
#import "A.h"

@interface B : NSObject <ADelegate> {

}

@end

//B.m
#import "B.h"

@implementation B

- (id) init {

	self = [super init];

	if (self != nil) {

		A *a = [[A alloc] init];
		a.delegate = self;
		[a printString];

	}

	return self;

}

- (void)willPrint {
	NSLog(@"vai printar na classe B");
}

- (void)didPrint {
	NSLog(@"terminou de printar na classe B");
}

@end
//C.h
#import <Foundation/Foundation.h>
#import "A.h"

@interface C : NSObject <ADelegate> {

}

@end

//C.m
#import "C.h"

@implementation C

- (id) init {

	self = [super init];

	if (self != nil) {

		A *a = [[A alloc] init];
		a.delegate = self;
		[a printString];

	}

	return self;

}

- (void)willPrint {
	NSLog(@"vai printar na classe C");
}

- (void)didPrint {
	NSLog(@"terminou de printar na classe C");
}

@end

Bom com as classes já criadas, vamos ao arquivo que irá iniciar o nosso teste. Procure o arquivo main.m que está dentro da pasta Other Sources e então deixe como segue abaixo.


#import <UIKit/UIKit.h>
#import "B.h"
#import "C.h"

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

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

	[[B alloc] init];
	NSLog(@"--------------------------");
	[[C alloc] init];

    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

Para executar esse programa e ver o resultado pressione command + enter, ou vá ao menu Build -> Build and Debug. Então após o programa rodar no simulador vá em Run -> console e veja a saida do NSLog que colocamos no código.

E se voce quiser pode tirar o método willPrint e verificar o que vai ocorrer.

E ainda pode ver que vai gerar um erro caso retire o método didPrint.

E para fixar ainda mais a idéia de como funciona o delegate, retire o comando a.delegate da classe B e veja o resultado.

Bom galera, espero que tenham entendido, sei que algumas coisas ficaram faltando explicar, porém vou escrever sobre @property em outro artigo sem dúvidas, porém iria ficar confuso escrever tudo nesse.

Espero que gostem, dúvidas e sugestões postem por favor.

@property no Objective-C – Entendendo a linguagem

Posted on janeiro 6, 2011

Posted by Pedro

Salve salve galera, como prometido, estou aqui novamente para escrever mais um artigo para entender a linguagem objetive-C.

Dessa vez eu vou falar um pouco sobre as propriedades no obj-C, vou tentar explicar como funciona da forma mais simples possível. No entanto o conteúdo que vou apresentar aqui é basicamente o conteúdo que você irá encontrar no site http://developer.apple.com/devcenter/ios/index.action, porém aqui eu vou simplificar a explicação e claro, vou escrever em português. Hehehe! Então vamos lá! Vocês conhecem o conceito para uso dos gets and seters? Se não conhece leia esse artigo que está disponível no site. Se já conhece esses conceitos básicos de OO vamos continuar.

No objective-C para criar nossas propriedades temos que usar a declaração @property da seguinte maneira:

@interface Teste : NSObject {
        @private int variavel;
}
//@property(atributo1, atributo1, ...) tipo nome;
@property (readwrite, assign) int variavel;
@end

Pronto! Dessa forma podemos criar nossas propriedades e adicionar atributos de acesso as variáveis e objetos das nossas classes. Mas ainda precisamos criar nosso get e set, para isso a linguagem nos da uma forma de fazer isso de forma automatizada usando a diretiva @synthesize no nosso arquivo .m, da seguinte maneira:

@implementation Teste
//@synthesize nome_da_variavel;
// Dessa forma é criado o get e set dessa variável get =  variavel, set = setVariavel. Pronto! Muito simples.
@synthesize variavel;
@end

Bom então agora já sabemos como criar nossas propriedades e dessa forma acessar de outras classe seus valores, porém precisamos ainda descobrir como funcionam os atributos de uma propriedade. Vou deixar para vocês aqui os exemplos contidos diretamente no site da apple para fins mais didáticos. Irei explicar os principais atributos que são eles: getter, setter, readwrite, readonly, assign, retain, copy e no meu ver um dos mais importantes nonatomic.

getter=nome_do_metodo_get: Você indica o nome do método que irá retornar o valor da variável

@property(getter=getMaria) int joao;

setter=nome_do_metodo_set: Você indica o nome do método que irá atribuir valor a variável.

@property(setter=setMaria) int joao;

readwrite: Por padrão ao você criar uma propriedade ela já é setada com essa propriedade que determina que a propriedade irá ser lida e sobrescrita.

@property(readwrite) int joao;

readonly: A propriedade pode ser apenas lida e não sobrescrita.

@property(readonly) int joao;

assign: Por padrão ao você criar uma propriedade ele é do tipo assign ou em outras palavras declaração simples.

@property(assign) int joao;

retain: Quando sua propriedade é do tipo ponteiro ela geralmente(uns 95% das vezes) é assinalada como retain(+1) evitando que quando for usado o comando release(-1) na propriedade por outras classe ela não seja removida da memória e gere erros no programa. Para um melhor entendimento do funcionamento do retain você pode olhar esse artigo da apple sobre gerencimento de memória.

//Declaração
@property(retain) ClasseObjota *joao;
//O que é realizado o set da propriedade
-(void)setJoao:(ClasseObjota *)obj {
    if (joao != obj) {
        [joao release];
        joao = [obj retain];
    }
}

copy: Quando a propriedade é assinalada com copy e o valor da propriedade for setado, o compilador irá criar uma cópia do objeto, criando assim mais um objeto alocado na memória.

//Declaração
@property(copy) ClasseObjota *joao;
//O que é realizado o set da propriedade
-(void)setJoao:(ClasseObjota *)obj {
    if (joao != obj) {
        [joao release];
        joao = [obj copy];
    }
}

nonatomic: Em uma aplicação multithread uma mesma variável pode ser chamada com o get e setada ao mesmo tempo, com isso o valor retornado não é garantido, pois o valor setado pode não está 100% copiado para o bloco de memória e esse valor ja ter sido recuperado no get, então esse valor retornado será "quebrado". Usando o nonatomic evitamos isso simplesmente copiando o valor em outro bloco e "renomeando" esse bloco quando terminado de copiar esse valor.

@property(nonatomic) ClasseObjota *joao;

Bem galera, então é basicamente isso o conteúdo sobre propriedades. Espero que tenham gostado da matéria!
Favor postar as dúvidas, críticas e elogios para melhor ainda mais os POST's. Até a próxima.

Hello world em objective-C na plataforma iPhone ou iPad

Posted on novembro 2, 2010

Posted by Pedro

Bom galera, como prometido eu vou começar com os meus artigos sobre desenvolvimento para iPhone e iPad (ou melhor iOS).

Como alguns de vocês já devem saber, a linguagem utilizada para desenvolvimento nessa plataforma é o Objective-C (linguagem derivada do C, com um desempenho surpreendente e orientada a objetos).

Para quem não conhece nada da linguagem, não se preocupe, pois no meio dos artigos vou explicar o que cada comando faz e o porque estamos utilizando os mesmos.

Como qualquer primeiro artigo, vamos fazer o clássico “Hello World”, em Objective-C já usando o Kit de desenvolvimento da Apple o UIKit.

No UIKit temos basicamente “tudo o que precisamos” para desenvolver aplicações para o iOS. Dentro desse Kit temos componentes como o UIView, que basicamente todos os componentes gráficos são derivados dessa classe.

Para iniciar nosso projeto precisamos primeiro ter um Mac em mãos (se tiver um PC com hackintosh também pode usar, porém uma hora você irá precisar de um Mac, acredite). Se você ainda não instalou o SDK (que vem com a IDE Xcode), acesse o endereço http://developer.apple.com/devcenter/ios/index.action e faça o download (precisa fazer o cadastro na Apple para fazer o download, é de graça o cadastro para o download).

Feito isso e com o Xcode já instalado, ai você pode iniciar o desenvolvimento de suas aplicações para a plataforma iOS.


Como criar um projeto no Xcode?

Para iniciar seu novo projeto, você deve clicar no ícone do Xcode e irá aparecer uma tela conforme abaixo:

Então clique em Create a new Xcode project, ao clicar nesse botão irá aparecer a tela para selecionar o template do projeto que você quer iniciar, no nosso caso vamos escolher o View-based Application que fica na caixa de seleção Application, no campo Product selecione para qual device você irá iniciar o projeto, no nosso caso você pode selecionar iPad, pois será a mesma coisa para iPhone e iPad, o que vai mudar são as configurações e tamanho de arquivos .xib (arquivos de interface gráfica que ele irá gerar), que nosso assistente irá gerar para nós.

Quando você clicar no botão Choose aparecerá para você a caixa de diálogo onde será salvo o projeto. Escolha um local e salve o projeto como o nome de HelloWorld.

Ao salvar o projeto, nosso ambiente de trabalho vai aparecer na tela para começarmos a trabalhar no nosso código, mas antes vale ressaltar alguns pontos importantes do nosso ambiente de desenvolvimento.

1 – Nessa pasta estão as classes da nossa aplicação, todas as classes criadas, por motivos de organização iremos sempre deixar aqui.

2 – Nessa pasta geralmente deixamos apenas esses arquivos mesmo, que é a classe que irá iniciar nossa aplicação e o arquivos que faz o import automático do frameworks quer serão usados em todas as classes do projeto, por padrão ele importa o UIKit e o Foundation.

3 – Na pasta Resources ficam todos os arquivos de imagem, .plist (arquivos que geralmente são usados como config da aplicação), .xib (arquivos de interface gráfica que são editados pelo Interface Builder) e arquivos de dados (XML, BD, etc.).

4 – Todos os frameworks que foram importados para a aplicação.

5 – O nome da App (executável, vamos dizer assim para os que estão familiarizado com windows) que será gerado.

6 – Na pasta Targets ficam todos os arquivos que irão fazer parte do pacote da aplicação na hora de compilar. Então quando tiver algum problema de um determinado arquivo não estiver sendo interpretado o problema pode esta nessa pasta. Eles são divididos em arquivos que serão compilados, arquivos de resource e frameworks.

7 – Ao clicar em algum arquivo, suas informações para edição ou para visualização serão mostrados aqui.


Vamos ao código

Procure o arquivo HelloWorldViewController.m e dentro desse arquivo encontre o método - (void)viewDidLoad, e dentro desse método coloque o seguinte:

[super viewDidLoad];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"My first program" message:@"Hello world" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

[alert show];

[alert release];


Após isso podemos executar nosso primeiro programa em objective-C, indo no menu build e clicando em build and run e ver o resultado (você também pode executar pressionando command + Y).

Se tudo funcionou OK, ou seja, se apareceu um alert na sua tela, veja a explicação do código abaixo, se não baixe os arquivos que estão no final do post e tente executar.

Primeiro chamamos o método viewDidLoad da super classe UIViewController e logo depois alocamos e iniciamos um objeto UIAlertView com os parâmetros para o título, mensagem, delegate (ainda temos muito o que falar sobre delegate), texto para o botão cancelar e falamos que não tem outros botões passando o valor nil em otherButtonTitles.

Então pedimos para exibir chamando o método show do objeto e finalmente removemos o objeto da memória ( [alert release] ).

Bom galera, então e isso. Chegamos ao fim do nosso exemplo mais do que simples de um Hello World em Objective-c Usando o UIKit.

Espero que tenham gostado. Dúvidas reclamações e sugestões postem aqui por favor, para que assim eu possa melhorar nos seguintes post`s.

Vlwww…

arquivos do post

Links importantes para desenvolvedores iPhone / iPad

Posted on agosto 25, 2010

Posted by Pedro

Galera para quem está com dificuldades em iniciar com o desenvolvimento para iPhone / iPad segue alguns links que jugo muito importates para iniciar essa "batalha" em busca de conhecimento que de certa forma está escasso aqui no Brasil.

Digamos que 99,9% do conteúdo está em inglês, então quem não possui uma boa leitura em inglês pode jogar no tradutor do google para ler.. hehe, mas o melhor mesmo é aproveitar a leva e estudar um pouco de inglês também.

Esses são os principais links:
http://developer.apple.com/ipad/sdk/index.html - Para quem está interessado em informações do iPad

http://guides.macrumors.com/Objective-C_Tutorial - Tutorial muito simples para quem está iniciando o estudo em objective-c.

http://www.iphonedevsdk.com/forum/tags/objective-c.html -  Aqui você vai encontrar 90% dos seus problemas já resolvidos.

http://developer.apple.com/iphone/library/navigation/index.html - Todas as informações que você precisa para iniciantes e programadores avançados na plataforma.

http://webclaudio.wordpress.com/category/desenvolvimento/iphone/ - Blog simplesmente fantástico sobre desenvolvimento para iPhone (em PT-BR).

http://www.edumobile.org/iphone/category/iphone-programming-tutorials/ - Tutoriais muito bacanas. Vale a pena conferir.

Essa página será atualizada com novas referências de links para estudos constantemente. Então deixe em seus favoritos e sempre que possível olhe para ver se possui alguma novidade.

E claro, você pode acompanhar o site do objota que sempre será atualizado com novas informações e tutoriais sobre iPhone / iPad.

Obrigado pessoal, e até a próxima!

O que é o iPad? Como desenvolver aplicativos para iPhone e iPad?

Posted on julho 26, 2010

Posted by Pedro

Para quem ainda não conhece o iPad, é um dispositivo no formato de tablet produzido pela Apple. Esse dispositivo é intermediário entre um notebook e um smartphone, ele utiliza o sistema operacional iPhone OS que já conhecido pelos que usam o iPhone, esse dispositivo promete revolucionar os dispositivos móveis.

iPad

O iPad possui um design fantástico que novamente para quem está acostumado com o iPhone não é nem uma novidade no seu design e sistema operacional.

Como nós de análise, desenvolvimento, inovadores, empresários e todos os outros que irão trabalhar com esse dispositivo para criar aplicativos, vender aplicativos ou utilizar para agilizar nossas vidas não podemos deixar de ficar por dentro das novas tecnologias, eu (Pedro Lucas) nos próximos dias vou começar uma série de artigos sobre o desenvolvimento de gatgets para iPhone / iPad.

A linguagem nativa para desenvolvimento de aplicativos para o iPhone OS é o Objective-C.
Obs: Os artigos de desenvolvimento apresentados no blog serão do básico ao avançado. Iremos iniciar com a linguagem Objective-C antes de entrar no SDK do iPhone OS.

Mas antes de começar segue para vocês algumas informações técnicas do iPad:

Tamanho e peso

  • Altura: 9,56 polegadas (242,8 mm)
  • Largura: 7,47 polegadas (189,7 mm)
  • Espessura: 0,5 polegada (13,4 mm)
  • Peso: 1,5 libras (0,68 kg) - modelo Wi-Fi; 1,6 libras (0,73 kg) modelo Wi-Fi + 3G

Tela

  • Tela Multi-Touch widescreen brilhante de 9,7 polegadas (diagonal), retroiluminada por LEDs, com tecnologia IPS
  • Resolução de 1024 por 768 pixels, 132 pixels por polegada (ppp)
  • Revestimento resistente à impressão digital e oleosidade
  • Suporte a vários idiomas e caracteres simultaneamente

Capacidades, Processador, Bateria e Entada / Saída

  • Unidade de memória flash de 16GB, 32GB ou 64GB (o valor varia de acordo com o tamanho do memória escolhida).
  • Memória RAM de 256MB
  • Apple A4 de 1GHz
  • Bateria interna recarregável de polímero de lítio de 25 watts/hora
  • Até 10 horas de duração da bateria navegando no dispositivo.
  • Carga via adaptador de energia ou USB para o computador
  • Conector de 30 pinos
  • Fone de ouvido estéreo de 3,5mm
  • Alto-falante interno
  • Microfone