Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Qcon SP 2012, 5 (ou mais) coisas que você gosta...

Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.

Aplicações famosas como o Instagram, Draw Something e WhatsApp, utilizam diversos recursos que muitas das vezes não fazemos ideia de que existem e estão disponíveis. Esses recursos podem ser tanto do próprio iOS, como da linguagem, influenciando no código escrito. Venha conhecer alguns desses recursos interessante que você poderá aproveitar para o seu próximo projeto!

Ricardo Valeriano

August 04, 2012
Tweet

More Decks by Ricardo Valeriano

Other Decks in Programming

Transcript

  1. Cinco (ou mais) coisas que você gostaria de saber sobre

    iOS e Objective-C Monday, August 6, 12
  2. Tipagem dinâmica, Podemos chamar um método que não está declarado

    na sua interface. Pato* patoFeio = [[Pato alloc] init]; [patoFeio late]; -> warning, não error. Monday, August 6, 12
  3. Tipagem dinâmica, Podemos chamar um método que não está declarado

    na sua interface. Pato* patoFeio = [[Pato alloc] init]; [patoFeio late]; -> warning, não error. OMG Monday, August 6, 12
  4. require 'rubygems' require 'builder' builder = Builder::XmlMarkup.new({ target: STDOUT, indent:

    2 }) builder.person do |x| x.name("Jim") x.phone("555-1234") end # # Prints: # <person> # <name>Jim</name> # <phone>555-1234</phone> # </person> Monday, August 6, 12
  5. require 'rubygems' require 'builder' builder = Builder::XmlMarkup.new({ target: STDOUT, indent:

    2 }) builder.person do |x| x.name("Jim") x.phone("555-1234") end # # Prints: # <person> # <name>Jim</name> # <phone>555-1234</phone> # </person> Monday, August 6, 12
  6. require 'rubygems' require 'builder' builder = Builder::XmlMarkup.new({ target: STDOUT, indent:

    2 }) builder.person do |x| x.name("Jim") x.phone("555-1234") end # # Prints: # <person> # <name>Jim</name> # <phone>555-1234</phone> # </person> Monday, August 6, 12
  7. require 'rubygems' require 'builder' builder = Builder::XmlMarkup.new({ target: STDOUT, indent:

    2 }) builder.person do |x| x.name("Jim") x.phone("555-1234") end # # Prints: # <person> # <name>Jim</name> # <phone>555-1234</phone> # </person> Monday, August 6, 12
  8. require 'rubygems' require 'builder' builder = Builder::XmlMarkup.new({ target: STDOUT, indent:

    2 }) builder.person do |x| x.name("Jim") x.phone("555-1234") end # # Prints: # <person> # <name>Jim</name> # <phone>555-1234</phone> # </person> Monday, August 6, 12
  9. -(id)forwardingTargetForSelector:(SEL)selector; Você pode delegar a chamada do método para outro

    objeto, um atributo por exemplo: E o method_missing? Monday, August 6, 12
  10. -(id)forwardingTargetForSelector:(SEL)selector; Você pode delegar a chamada do método para outro

    objeto, um atributo por exemplo: E o method_missing? - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector; NSMethodSignature é a compilação do SEL Monday, August 6, 12
  11. -(id)forwardingTargetForSelector:(SEL)selector; Você pode delegar a chamada do método para outro

    objeto, um atributo por exemplo: E o method_missing? - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector; NSMethodSignature é a compilação do SEL -(void)forwardInvocation:(NSInvocation *)anInvocation; forwardInvocation é o nosso method_missing :P Monday, August 6, 12
  12. LogFail? LogPass? var target = UIATarget.localTarget(); UIALogger.logStart("go to original position");

    target.tap({x:100, y:200}); if (field.rect()["origin"]["y"] == position) ! UIALogger.logPass("ok"); else ! UIALogger.logFail("Nok"); Monday, August 6, 12
  13. LogFail? LogPass? var target = UIATarget.localTarget(); UIALogger.logStart("go to original position");

    target.tap({x:100, y:200}); if (field.rect()["origin"]["y"] == position) ! UIALogger.logPass("ok"); else ! UIALogger.logFail("Nok"); Monday, August 6, 12
  14. LogFail? LogPass? var target = UIATarget.localTarget(); UIALogger.logStart("go to original position");

    target.tap({x:100, y:200}); if (field.rect()["origin"]["y"] == position) ! UIALogger.logPass("ok"); else ! UIALogger.logFail("Nok"); Monday, August 6, 12
  15. LogFail? LogPass? var target = UIATarget.localTarget(); UIALogger.logStart("go to original position");

    target.tap({x:100, y:200}); if (field.rect()["origin"]["y"] == position) ! UIALogger.logPass("ok"); else ! UIALogger.logFail("Nok"); Monday, August 6, 12
  16. var target= UIATarget.localTarget(); var app= target.frontMostApp(); var window= app.mainWindow(); var

    controls= window.segmentedControls(); var segmented= controls[0]; segmented.buttons()[0].tap(); Monday, August 6, 12
  17. var target= UIATarget.localTarget(); var app= target.frontMostApp(); var window= app.mainWindow(); var

    controls= window.segmentedControls(); var segmented= controls[0]; segmented.buttons()[0].tap(); Monday, August 6, 12
  18. var target= UIATarget.localTarget(); var app= target.frontMostApp(); var window= app.mainWindow(); var

    controls= window.segmentedControls(); var segmented= controls[0]; segmented.buttons()[0].tap(); Monday, August 6, 12