Frage

    

Diese Frage bereits eine Antwort hier:

         

iPhone SDK 4.0, UIApplication hat eine neue Methode, setKeepAliveTimeout:, die einen zweiten Parameter des Typs void(^)(void) erfordert.

-(BOOL)setKeepAliveTimeout:(NSTimeInterval)timeout handler:(void(^)(void))keepAliveHandler

Was genau macht die Syntax des zweiten Parameters bedeuten, und wie würde ich eine Funktion / Handler erklären, dass ich in sie passieren kann?

FWIW Folgendes ist nicht das, was es sucht ...

void SomeHandler( void )
{
}
War es hilfreich?

Lösung

Es ist ein "Block", eine neue Apple-Funktion C in Snow Leopard hinzugefügt. Viele weitere Informationen finden Sie unter:

https://developer.apple .com / library / mac / Dokumentation / Cocoa / Conceptual / Blöcke / Artikel / 00_Introduction.html

  

Blockobjekte

     

Block-Objekte (informell, „Blöcke“) sind eine Erweiterung zu C sowie Objective-C und C ++, dass es einfach für Programmierer zu definieren, in sich geschlossene Einheiten der Arbeit. Die Blöcke sind ähnlich - aber viel mächtiger als - traditionelle Funktionszeiger. Die wichtigsten Unterschiede sind:

     

Blöcke können inline definiert werden, als „anonyme Funktionen.“   Blöcke Erfassung schreibgeschützte Kopien von lokalen Variablen, ähnlich wie bei „Schließungen“ in anderen Sprachen   Dies ist eine Art von Funktionalität ist in dynamisch typisierten Sprachen interpretiert gemeinsam hat, aber noch nie in C-Programmierer allgemein verfügbar gewesen. Apple veröffentlicht hat sowohl die Blöcke Sprachen Spezifikation und unsere Implementierung als Open Source unter der MIT-Lizenz, hinzugefügt Blöcke unterstützen zu GCC 4.2 und Klirren, und hat es sich zur Prüfung als Teil der nächsten Version der Programmiersprache C geschrieben.

     

Syntax

     

Ein Blockvariable sieht aus wie ein Funktionszeiger, außer mit einem Caret ( ‚^‘) anstelle von einem Stern ( ‚*‘).

void (^my_block)(void);

Andere Tipps

Und der Code für diese bestimmte Funktion würde in etwa so aussehen:

[[UIApplication sharedApplication] setKeepAliveTimeout:5.0 handler:^{
    NSLog( @"This is my timeout handler" );
}];

Es bedeutet, dass es einen Block nehmen (der Code, auch bekannt als Verschluss) finden Sie unter http : //developer.apple.com/mac/articles/cocoa/introblocksgcd.html Das sind neue zu Objective-C für OSX 10.6 und iOS 4

können Funktionen maskiert werden wie folgt.

#if NS_BLOCKS_AVAILABLE
- (void)foo;
#endif
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top