- Home /
Dispose Object in IOS
Hello everybody
I want to clone "Object.Destroy(Object)" method
todo like this Object a = .....; Object b = null; b = a; Object.Destroy(b); Debug.Log(a == null); // true
I think I should use dispose object by my self I create BaseDisposable for this dispose my object
when any class extend BaseDisposable that class can use Dispose() yes it work in editor
but in IOS it not work
XCODE throws exception
ExecutionEngineException: Attempting to JIT compile method '(wrapper remoting-invoke) object:ToString ()' while running with --aot-only.
at System.Runtime.Remoting.Proxies.RealProxy.GetTransparentProxy () [0x00000] in <filename unknown>:0
at System.Runtime.Remoting.RemotingServices.CreateClientProxyForContextBound (System.Type type, System.Object[] activationAttributes) [0x00000] in <filename unknown>:0
at System.Runtime.Remoting.Activation.ActivationServices.CreateProxyForType (System.Type type) [0x00000] in <filename unknown>:0
at OzEngine.OzWorld.get_Instance () [0x00000] in <filename unknown>:0
at OzWorld_Behaviour.Awake () [0x00000] in <filename unknown>:0
(Filename: Line: -1)
ExecutionEngineException: Attempting to JIT compile method '(wrapper remoting-invoke) object:ToString ()' while running with --aot-only.
at System.Runtime.Remoting.Proxies.RealProxy.GetTransparentProxy () [0x00000] in <filename unknown>:0
at System.Runtime.Remoting.RemotingServices.CreateClientProxyForContextBound (System.Type type, System.Object[] activationAttributes) [0x00000] in <filename unknown>:0
at System.Runtime.Remoting.Activation.ActivationServices.CreateProxyForType (System.Type type) [0x00000] in <filename unknown>:0
at OzEngine.OzWorld.get_Instance () [0x00000] in <filename unknown>:0
at RFC_3DManagerUnity.Awake () [0x00000] in <filename unknown>:0
(Filename: Line: -1)
anyway to do it ?
sorry for my poor english
thank for answers
this my BaseDispose using System; using System.Runtime.Remoting.Activation; using System.Runtime.Remoting.Contexts; using System.Runtime.Remoting.Messaging;
namespace MYSPACE
{
public class DisposableAspect : IMessageSink
{
private BaseDisposable realobject = null;
public DisposableAspect(IMessageSink next) { NextSink = next; }
public IMessage SyncProcessMessage(IMessage msg)
{
if (msg is IMethodMessage)
{
var method = msg as IMethodMessage;
BaseDisposable obj = null;
IMessage ret = null;
if (method.MethodName == ".ctor")
{
Preprocess(msg);
ret = NextSink.SyncProcessMessage(msg);
realobject = (BaseDisposable)((IMethodReturnMessage)ret).ReturnValue;
}
else
{
obj = realobject;
Preprocess(msg, obj);
ret = NextSink.SyncProcessMessage(msg);
}
return ret;
}
IMessage returnMethod = NextSink.SyncProcessMessage(msg);
return returnMethod;
}
private void Preprocess(IMessage msg, BaseDisposable baseDisposable = null)
{
if (baseDisposable != null && baseDisposable.IsDisposed) { throw new NullReferenceException("Object reference not set to an instance of object"); }
}
public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) { throw new NotImplementedException(); }
public IMessageSink NextSink { get; private set; }
}
public class DisposableProperty : IContextProperty, IContributeServerContextSink
{
public DisposableProperty() { }
public bool IsNewContextOK(Context newCtx)
{
DisposableProperty newContextLogProperty = newCtx.GetProperty(Name) as DisposableProperty;
return newContextLogProperty != null;
}
public void Freeze(Context newContext) { }
public string Name { get { return "Disposable"; } }
public IMessageSink GetServerContextSink(IMessageSink nextSink) { return new DisposableAspect(nextSink); }
}
[AttributeUsage(AttributeTargets.Class)]
public class DisposableAttribute : ContextAttribute
{
public DisposableAttribute() : base("DisposableAttribute") { }
public override void GetPropertiesForNewContext(IConstructionCallMessage ccm) { ccm.ContextProperties.Add(new DisposableProperty()); }
}
[Disposable()]
public abstract class BaseDisposable : ContextBoundObject, IDisposable
{
private bool _disposed = false;
public bool IsDisposed { get { return _disposed; } }
~BaseDisposable() { Dispose(false); }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) { _disposed = true; }
}
}
Your answer
Follow this Question
Related Questions
How to remove an object from an array once it has been destroyed 1 Answer
Pick up objects 2 Answers
How to destroy a unit contained in multiple lists 1 Answer
Destroy the current GameObject? 7 Answers
destroying object after animation 3 Answers