NSProxy

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Irgendwie bin ich gerade leicht verwirrt wie man NSProxy nun korrekt einsetzt.
    Soweit ich das verstehe diehnt ja NSProxy dazu, Methodenaufrufe abzufangen und ggf noch speziellen krempel zusätzlich zu erledigen ( wie zb der -animator proxy).

    Wie gibt man jetzt ein Proxy objekt richtig zurück und wie fängt man die nachrichten ab?
    enum { NSNoInterfaceStyle = 0, // Default value for window's interfaceStyle
  • Das hier ist die implementation die Probleme macht

    Whatever.m

    Quellcode

    1. LMSession *session = [LMSession sessionWithUser:@"someuser" password:@"somepw"];
    2. [[session queueProxy] validate]; // <- hier sagt er dauernd ich hab mehrere methoden die validate heissen


    LMSession.m

    Quellcode

    1. @interface LMSessionProxy : NSProxy
    2. {
    3. id target;
    4. }
    5. - (id)initWithTarget:(id)aTarget;
    6. @end
    7. @implementation LMSessionProxy
    8. - (id)initWithTarget:(id)aTarget
    9. {
    10. target = [aTarget retain];
    11. return self;
    12. }
    13. - (void)dealloc
    14. {
    15. [target release];
    16. [super dealloc];
    17. }
    18. - (BOOL)validate
    19. {
    20. [LMBase enqueueValidatedOperationForTarget:target selector:_cmd object:nil];
    21. return YES;
    22. }
    23. @end
    Alles anzeigen


    LMSession.m

    Quellcode

    1. - (BOOL)validate {
    2. // Original implementation
    3. }
    4. - (id)queueProxy
    5. {
    6. return [[[LMSessionProxy alloc] initWithTarget:self] autorelease];
    7. }
    enum { NSNoInterfaceStyle = 0, // Default value for window's interfaceStyle
  • Konkret: Wieso beschwert sich der compiler nicht bei einem aufruf von [[someview animator] setAlphaValue:xyz] ? setAlphaValue ist ja auch ein setter von NSWindow und NSView.



    EDIT:
    Mir ist gerade aufgefallen dass ich NSProxy ja oben genauso einsetze wie ein NSObject.... irgendwie sinnfrei !?
    enum { NSNoInterfaceStyle = 0, // Default value for window's interfaceStyle
  • Original von fatal
    ... dass ich NSProxy ja oben genauso einsetze wie ein NSObject.... irgendwie sinnfrei !?
    Was willst Du erreichen?

    NSProxy wird vor allem für interne Zwecke für "Distributed Objects" eingesetzt um die Stellvertreter (NSDistantObject) von NSProxy abzuleiten (von NSObject kann man sie nicht ableiten weil dann viele Methoden vordefiniert sind und gr nicht mehr ein -forwardInvocation: auslösen).

    Bisher hatte ich noch nie den Bedarf das selbst zu verwenden.

    -- hns
  • NSProxy ist die andere Basisklasse in Cocoa. Das System kennt davon nur 2 Unterklassen, NSDistantObject und NSProtocolChecker. Instanzen von NSSDistantObject werden normalerweise immer von NSConnection erzeugt, das sind dann die eigenen entfernten Objekte. Nur Instanzen NSProtocolChecker erzeugt man selbst.

    Man benutzt DO, um von außerhalb Objekten als wie von innerhalb des Programmes Nachrichten senden zu können.
    Original von fatal
    Konkret: Wieso beschwert sich der compiler nicht bei einem aufruf von [[someview animator] setAlphaValue:xyz] ? setAlphaValue ist ja auch ein setter von NSWindow und NSView.

    NSProxy als Basisklasse muss alles akzeptieren können, das ist ja gerade das Schöne daran.
    Original von fatal

    EDIT:
    Mir ist gerade aufgefallen dass ich NSProxy ja oben genauso einsetze wie ein NSObject.... irgendwie sinnfrei !?

    Ja, an sich richtig, aber nicht ganz, und auch nicht sinnfrei. Du erzeugst die Objekte nicht selbst. Ein NSWindow als DO ist erstmal ein über NSConnection erzeugte Instanz von NSWindow mit der Superklasse NSDistantObject und der Basisklasse NSProxy. Diese Instanz, die dann in Deinem Fall ein Fenster auf der Gegenseite reflektiert, kannst Du benutzen wie ein eigenes Fenster.
    Allerdings macht es wenig Sinn, Elemente der Benutzeroberfläche direkt dafür zu verwenden.
    I would be embarrassed if they did not spy on me.