/** * Appcelerator Titanium Mobile * Copyright (c) 2009-2010 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. */ #import #import "TiCore.h" #import "KrollContext.h" @class KrollBridge; // // KrollCallback is a wrapper around a JS function object which is passed // from JS land to native. This object can be passed around on the native // side as a normal opaque object and then passed back through to Kroll // for function invocation (or just to pass the function object back as-is) // @interface KrollCallback : NSObject { @private TiContextRef jsContext; TiObjectRef thisObj; TiObjectRef function; KrollContext *context; KrollBridge * bridge; NSLock* contextLock; NSString *type; } @property(nonatomic,readwrite,retain) NSString *type; -(id)initWithCallback:(TiValueRef)function_ thisObject:(TiObjectRef)thisObject_ context:(KrollContext*)context_; -(id)call:(NSArray*)args thisObject:(id)thisObject_; -(TiObjectRef)function; -(KrollContext*)context; +(void)shutdownContext:(KrollContext*)context; @end // // KrollCallback has one fatal flaw: It can lead to retention loops. So when a // function is to be a property of a proxy, we store this on the JS object. But // if the proxy spans multiple contexts, we need to take a rain check on other // contexts. // In the mean time, for functions passed as a property between contexts, we // need a lightweight wrapper. This is probably not the best way, but this // should be sufficient for 1.7 in the edge case of one context needing to call // another context's function. // Until KrollObjectProperty and such are addressed in the future, this is an object that is never // made explicitly by TiIdToValue; instead, all JS functions become KrollCallbacks, and both // KrollCallbacks and KrollObjectProperties will be converted into functions (or TiObjectRefs at // any rate) @class KrollBridge; @interface KrollFunction : NSObject { TiObjectRef remoteFunction; KrollBridge * remoteBridge; } @property (nonatomic,readwrite,assign) TiObjectRef remoteFunction; @property (nonatomic,readwrite,assign) KrollBridge * remoteBridge; @end