quinta-feira, 19 de janeiro de 2012

Dicas de Programação: "Adicionando" métodos em Classes Nativas (Objective C)

Essa eu aprendi com um cara aqui da empresa. :)

Sempre que precisava de um método novo em uma classe que já existia em Java, eu tinha que criar uma nova classe que herdava desta e criar o método:

public class MyArrayList extends ArrayList {
          public void sort() {
          ...
          }
}

Para usar, tinha que substituir a instância para esta classe:

//De: ArrayList a = new ArrayList(); 
//Para:
MyArrayList a = new MyArrayList();
a.sort();

Mas em Objective C existe uma coisa interessante, se eu quiser criar um método em uma classe já existente, basta colocar uma "categoria" para ela. Por exemplo: quero criar um método chamado parseJSON na classe NSString (que já existe na API da Apple):

/*
 * NSString+JSON.h
 */
@interface NSString (NSString_JSON)
- (NSDictionary*) parseJSON;
@end

/*
 * NSString+JSON.m
 */
@implementation NSString (NSString_JSON)
- (NSDictionary*) parseJSON
{
...
}
@end

Agora, qualquer objeto do NSString possue este método (sem eu precisar mudar a classe da variável!):
NSString* str = @"{a:1, b:2}";
NSDictionary* dict = [str parseJSON];

Muito interessante... :)
Valeu, Koga, pela dica!

Até mais!