Foi-me pedido que a vantagem ou desvantagem no uso de funções anônimas ou in-line (ou onfly), muito usado em Javascript, e agora com 5,3, também em PHP.
Uma função inline, ou anônimo, porque ele não tem - de fato - um nome, é uma forma rápida de escrever alguns procedimentos, o recuo árvore exemplo de retorno de chamada sequências. Quase todos os idiomas suportam funções deste escrito, para limitar cada um com suas peculiaridades e restrições. Eles também podem ter diferentes nomes e os detalhes de sintaxe, tais como os blocos chamadas em Objective-C.
Artigos com a tag 'retorno'
Funções anônimas
iPhone: criar uma forma de responder aos eventos que atravessam classe
Normalmente, um evento, que nada mais é que uma mensagem é fixo (definido e implementado) na mesma classe ou contexto, a função ou procedimento "chamador". o in un UIViewController . Por exemplo, se adicionar um botão UIButton via código (de programação), podemos encontrar a nossa classe em um UIView ou um UIViewController . Em ambos os casos, a atribuição de tarefas e de inicialização do botão será seguido pela definição de target que deverá receber uma mensagem quando ele "clica" no botão, digite:
1 2 3 4 5 6 7 8 9 | [ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton botão * = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30); @ "Press me" forState : UIControlStateNormal ] ; [Botão setTitle: @ "Prima-me" forState: UIControlStateNormal]; / / Decida quem deve receber a mensagem UIControlEventTouchUpInside self action : @selector ( onButtonClicked ) forControlEvents : UIControlEventTouchUpInside ] ; Botão [AddTarget: acção de auto: @ selector (onButtonClicked) forControlEvents: UIControlEventTouchUpInside]; / / ... void ) onButtonClicked { - (Void) {onButtonClicked / / ... } |
Linha 5 do código mostrado acima decide quem (sujeito) e aquilo (método) "Chamada" quando o nosso botão é pressionado. No exemplo ilustrado acima é também conhecido que a pressão definindo da mensagem é enviada para o método onButtonClick implementado abaixo, e, em seguida, fazendo parte do mesmo contexto (ou classe). potremmo inviare il nostro messaggio ad un qualsiasi altro oggetto, posto quindi al difuori del contesto in uso. A primeira consideração é óbvio que podemos fazer, então, é que, alterando os parâmetros self e action podemos enviar nossa mensagem para qualquer outro objeto, em seguida, coloque também fora do contexto em uso. : Aqui está um exemplo: uma classe UIApplicationDelegate criar um UIViewController :
1 2 3 4 5 | / / / / MyAppDelegate.m / / SplashScreenController alloc ] ; splashScreenController = [SplashScreenController alloc]; splashScreenController.view ] ; [Janela addSubview: splashScreenController.view]; |
associata al UIViewController stesso: O SplashScreenController expõe um método que permite animar o UIView associado UIViewController mesmo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | / / / / SplashScreenController.m / / void ) animateBackgroundDown { - (Void) {animateBackgroundDown nil context : nil ] ; [UIView beginAnimations: contexto nil: nil]; 0.75 ] ; [UIView setAnimationDuration: 0,75]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; self ] ; [SetAnimationDelegate UIView: auto]; @selector ( onAnimationFinished ) ] ; [UIView setAnimationDidStopSelector: @ selector (onAnimationFinished)]; CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480}; ; [UIView commitAnimations]; } / / ... void ) onAnimationFinished { - (Void) {onAnimationFinished "Animazione terminata" ) ; NSLog (@ "Animação terminada"); } |
. O código acima mostra um método definido dentro da classe SplashScreenController tipo UIViewController . ) onAnimationFinished definito più sotto, facente parte sempre della classe SplashScreenController . Ele não faz nada, mas animar o UIView animá-lo para baixo, e quando a animação é completa, ligue para (enviar uma mensagem para si - daí self ) onAnimationFinished definido abaixo, é parte da classe sempre SplashScreenController . , non saremo informati della fine dell'animazione: Segue-se que no nosso myAppDelegate , quando invocamos o método animateBackgroundDown , não vamos ser informado do fim da animação:
1 2 3 4 | / / / / MyAppDelegate.m / / ; [SplashScreenController animateBackgroundDown]; |
O que nós queremos, em vez disso, é criar uma nova versão do animateBackgroundDown como a dizer-lhe para onde enviar a animação final da mensagem e qual método chamar. Na prática, queremos ter certeza que você pode escrever em nossa classe myAppDelegate :
1 2 3 4 5 6 7 8 | / / / / MyAppDelegate.m / / self selector : @selector ( onAnimationFinished ) ] ; [SplashScreenController animateBackgroundDown: seletor self: @ selector (onAnimationFinished)]; / / ... void ) onAnimationFinished { - (Void) {onAnimationFinished "Animazione terminata" ) ; NSLog (@ "Animação terminada"); } |
, bensì in myAppDelegate . Desta vez, o método onAnimationFinished não está no UIViewController , mas em myAppDelegate . nel modo seguente: Para fazer isto simplesmente alterar o método animateBackgroundDown em UIViewController como se segue:
1 2 3 4 5 6 7 8 9 10 11 12 | / / / / SplashScreenController.m / / void ) animateBackgroundDown : ( id ) target selector : ( SEL ) selector { - (Void) animateBackgroundDown: (id) alvo seletor: (SEL) seletor { nil context : nil ] ; [UIView beginAnimations: contexto nil: nil]; 0.75 ] ; [UIView setAnimationDuration: 0,75]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; target ] ; [SetAnimationDelegate UIView: target]; selector ] ; [UIView setAnimationDidStopSelector: selector]; CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480}; ; [UIView commitAnimations]; } |
). Agora temos um método que aceita o "contexto" ( target ) eo método a ser chamado ( selector ). a qualsiasi altro “oggetto” / classe in grado di riceverlo. Agora, quando a animação termina, a mensagem AnimationDidStop será enviado para myAppDelegate qualquer "objeto" outro / classe que pode recebê-lo.
Wordpress: ordenar uma série de mensagens para qualquer campo
o un array di oggetti. A técnica que eu descrevo aqui é útil em muitas situações onde, por exemplo, temos uma array de array ou array de objetos. , senza aver accesso alla select originale (sul database) che ha generato l'elenco (array) stesso: No WordPress você pode querer manipular uma lista de mensagens, no formato padrão array de stdClass Object sem ter acesso para selecionar o original (o banco de dados) que gerou a lista (array) em si:






Últimos Comentários
Assunto : muito útil mesmo! Eu tentei isso e é exatamente o que eu precisava. Agora eu quero saber como faço para obter ...
vik : Com a ajuda estratégica!
Pimenta : Olá, eu não sei se você é um dos criadores do plugin WP Bannerize. Tenho visto um ...
Rosanna : Alguém pode me dizer como faço para excluir o Snap Shots janela que se abre automaticamente quando eu ...
bendito Maresca : Eu não posso fazer download de qualquer skypemote me spiegaaa