2012-09-21 31 views
8

Estaba leyendo algo de código fuente de https://github.com/MugunthKumar/MKNetworkKit, y vi esta¿Qué significa [self self] en el objetivo c?

+(void) initialize { 

    if(!_sharedNetworkQueue) { 
    static dispatch_once_t oncePredicate; 
    dispatch_once(&oncePredicate, ^{ 
     _sharedNetworkQueue = [[NSOperationQueue alloc] init]; 
     [_sharedNetworkQueue addObserver:[self self] forKeyPath:@"operationCount" options:0 context:NULL]; 
     [_sharedNetworkQueue setMaxConcurrentOperationCount:6]; 

    }); 
    }    
} 

lo que hace que [self] quiere decir aquí?

+1

Mi primera suposición es que apunta a la meta clase de uno mismo. Tal vez alguien puede confirmar si esto es cierto. Más información sobre metaclases de ObjC aquí: http://cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html Lea también lo siguiente: http://www.sealiesoftware.com /blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html ('Objective-C utiliza metaclases para objetivos prácticos como métodos de clase, pero por lo demás tiende a ocultar metaclases. por ejemplo, [clase NSObject] es idéntico al [libre NSObject]') –

+2

@ WolfgangSchreurs: No. – Jesper

Respuesta

10

-self es un método defined in the NSObjectprotocol. Devuelve el receptor, es decir, el objeto al que envía el mensaje self. Si lo hace [a self], se obtiene a atrás, y sí, si lo hace [self self] (o self.self), que de hecho consigue self espalda.

puede ser útil en las rutas clave-valor, donde se supone que añadir un nuevo componente, pero la intención de observar la totalidad del objeto, como en el cacao en Enlaces. No veo ninguna aplicación de esto en el código que ha publicado, pero puede ser que los proxies adopten self de manera diferente, para apuntar al proxy en sí mismo, en lugar del objeto remoto/reenviado.

8

Es lo mismo que self, sólo una llamada redundante.

[self self] // ---> Same object of self