clases anónimos pueden ser implementados con biblioteca.Hace varios meses trabajé en la horquilla MMMutableMethods
para mejorar la implementación anterior (discutiendo con el autor) y agregar mi propio mecanismo sin ninguna manipulación obj-c en tiempo de ejecución.
https://github.com/k06a/MMMutableMethods
A. En primer mecanismo funciona en obj-c tiempo de ejecución de creación de clases:
MM_CREATE(MM_REUSE,^(Class class){
[class addMethod:@selector(onResultWithId:)
fromProtocol:@protocol(AMCommandCallback)
blockImp:^(id this,id res){
NSLog(@"onResultWithId: %@",res);
}];
[class addMethod:@selector(onErrorWithJavaLangException:)
fromProtocol:@protocol(AMCommandCallback)
blockImp:^(id this,JavaLangException *e){
NSLog(@"onErrorWithJavaLangException: %@",e);
}];
})
B. Segundo mecanismo funciona en el mensaje simple aplicación hacia adelante:
MM_ANON(^(MMAnonymousClass *anon){
[anon addMethod:@selector(onResultWithId:)
fromProtocol:@protocol(AMCommandCallback)
blockImp:^(id this,id res){
NSLog(@"onResultWithId: %@",res);
}];
[anon addMethod:@selector(onErrorWithJavaLangException:)
fromProtocol:@protocol(AMCommandCallback)
blockImp:^(id this,JavaLangException *e){
NSLog(@"onErrorWithJavaLangException: %@",e);
}];
})
crea
Primero uno nuevas clases obc-j en tiempo de ejecución, le permite crear clases MM_CREATE_CLASS(MM_REUSE, *)
y directamente instancias con MM_CREATE(MM_REUSE, *)
. Las clases se crearán solo en la primera ejecución y se reutilizarán de manera predeterminada, pero puede evitar la reutilización llamando al MM_CREATE_CLASS_ALWAYS(*)
y MM_CREATE_ALWAYS(*)
.
El segundo mecanismo no crea ninguna instancia de tiempo de ejecución, simplemente recuerda los bloques para los selectores y les envía las llamadas a métodos.
Prefiero la segunda manera de no crear muchas clases en tiempo de ejecución. En mi humilde opinión, es mucho más seguro y poderoso.
Para utilizar esta biblioteca simplemente:
pod 'MMMutableMethods', :git => 'https://github.com/k06a/MMMutableMethods'
posible duplicado de [? Delegado aplicación Anonymous en Objective-C] (http://stackoverflow.com/questions/766475/anonymous-delegate-implementation-in- objetivo-c) –
@Dave DeLong Título aclarado para diferenciar de esa pregunta. En este caso, el contexto es un método estático. – hpique
el contexto no importa. Debe proporcionar un objeto ('id') como delegado, y la otra pregunta responde claramente que no existe una clase anónima en Objective-C (todavía), por lo que tendrá que usar un objeto normal –