destroy_destroywindow - CSDN
精华内容
参与话题
  • destroy()方法:摧毁 销毁

    千次阅读 2014-03-04 10:34:48
    当servlet执行一次构造方法或者初始化方法,就不会再执行,例子在12softch1/servlet/HelloServlet

    当servlet执行一次构造方法或者初始化方法,就不会再执行,例子在12softch1/servlet/HelloServlet


    package test;


    import java.io.IOException;
    import java.io.PrintWriter;


    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    public class HelloServlet extends HttpServlet {


    /**
    * Constructor of the object.
    */
    //构造方法
    public HelloServlet() {
       System.out.println("构造方法"); 
    }


    /**
    * Destruction of the servlet. <br>
    */
    public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    System.out.println("销毁helloservlet");
    }


    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {


    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
       out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
    out.println("<HTML>");
    out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    out.println("  <BODY>");
    out.print(" Hello servlet,你好");
    out.print(this.getClass());
    out.println(", using the GET method");
    out.println("  </BODY>");
    out.println("</HTML>");
    out.flush();
    out.close();
    }




    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
              doGet(request,response);
    }
    public void init() throws ServletException {
      System.out.println("初始化方法");
    }


    }

    展开全文
  • 1)destroy:虚方法 释放内存,在Tobject中声明为virtual,通常是在其子类中override 它,且要加上inherited关键字,才能保证派生类对象正确地被销毁; 但destroy一般不能直接用,为什么? 当一个对象为nil,我们...
    1)destroy:虚方法

    释放内存,在Tobject中声明为virtual,通常是在其子类中override 它,且要加上inherited关键字,才能保证派生类对象正确地被销毁;
    但destroy一般不能直接用,为什么?
    当一个对象为nil,我们仍然调用destroy,会产生错误。因为destroy是虚方法,它要根据对象中的头四个字节找到虚拟方法表Vmt的入口地址,从而找到destroy的入口地址,所以此时对象一定要存在。但free就是静态方法,它根据对象引用/指针的类型来确定,即使对象本身不存在也不会产生异常,而且在free中有判断对象是否存在的操作,所以一般的情况下都用Free来释放对象。

    2)free:静态方法

    测试对象是否为nil, 不为nil则调用destroy。下面是free的Delphi代码:
    procedure TObject.Free;
    begin
    if Self <> nil then
    Destroy;
    end;
    一静一动,取长补短,岂不妙哉!
    但是调用对象的Destroy只是把对象销毁了,但并没有把对象的引用设为nil,这需要程序员来完成,不过自从Delphi5之后,在sysUtils单元中提供了一个freeAndNil。

    3)freeAndNil:一个独立的函数,不属于任何对象,非对象方法,非类方法。

    procedure FreeAndNil(var Obj);
    var
    Temp: TObject;
    begin
    Temp := TObject(Obj);
    Pointer(Obj) := nil;
    Temp.Free;
    end;

    建议大家用它代替free/Destroy,以便确保正确地释放对象。

    4)release:TcustomForm中定义的静态方法。

    当窗口中所有的事件处理完之后,才调用free函数。常用在销毁窗口,而在这个窗口中事件处理需要一定的时间的时候,用这个方法能确保窗口事件处理完之后才销毁窗口。
    下面是TCustomForm.Release的Delphi源代码:
    procedure TCustomForm.Release;
    begin
    PostMessage(Handle, CM_RELEASE, 0, 0);
    //向窗口发CM_RELEASE消息到消息队列,当所有的窗口事件消息处理完之后,
    //再调用CM_RELEASE消息处理过程CMRelease
    end;
    再看看下面CM_RELEASE消息处理过程CMRelease的定义:
    procedure CMRelease(var Message: TMessage); message CM_RELEASE;
    procedure TCustomForm.CMRelease;
    begin
    Free; //最后还是free;
    end;
    展开全文
  • 以前使用Destroy删除游戏物体,删了就删了,也没有使用过DestroyImmediate来删除游戏物体 今天使用Destroy却碰到了一个坑,故顺便记录一下 在文章开始前,我们有必要区分一下使用Destroy和DestroyImmediate删除...

    以前使用Destroy删除游戏物体,删了就删了,也没有使用过DestroyImmediate来删除游戏物体

    今天使用Destroy却碰到了一个坑,故顺便记录一下

     

    在文章开始前,我们有必要区分一下使用Destroy和DestroyImmediate删除游戏物体有什么区别?

    1   使用Destroy删除游戏物体,游戏物体并不会立即被删除,而是异步执行的,不会影响主线程的执行,说白了,就是它另外开一条道去执行了,这点很重要,接下来的例子就会有体现

    2  使用DestroyImmediate删除游戏物体,游戏物体立即被删除,代码顺序执行,影响主线程的执行

     

     

    首先先介绍一下问题的背景

    我做的是一个习题系统,包括选择题、填空题和简答题,填空题的界面如下图:

    为了方便描述,请允许我把

    这一块东西叫做 ‘框’,如上面的叫  ‘框1’

    使用AnswerPanel1为模板,生成填空题的  ‘空2’(‘框2’)、‘空3’('框3')、‘空4’('框4)等,为了程序方便操作,名称对应为AnswerPanel2、AnswerPanel3 、AnswerPanel4 等  。 因为需要填空的个数是不确定的,需要根据每道题的问题中需要填空的个数来动态生成  ‘框’

    以点击  ‘上一题’的按钮为例进行说明,当用户点击该按钮时,保存用户输入的答案,并把这道题中的所有的  ‘框’(除了'框1')都进行删除,接着在这个界面加载上一道题的题目,并根据题目中空的个数来动态绘制 ‘框’的个数,最后,还需要把用户在这道题填了那些内容加载回来并显示回对应的 ‘框’。

    总的业务逻辑描述如下图:

     

    执行第一步时,使用Destroy删除 ‘框’时,发现一个很奇怪的问题,第三步动态绘制的 ‘框’的个数是正确的,但是到第四步时,显示回用户的答案时总是不正确(只有'框1'显示的答案正确,其它的‘框’需要显示的答案直接不显示)

    出现这种情况的原因是: 使用Destroy删除时,是异步删除(它是另外开道执行删除),如本道题的 ‘框3’还没有删除,上一道题的 ‘框3’就已经绘制完毕,而且两个 ‘框3’是同名的,有两个同名的 ‘框3’,当执行到第四步时,通过GameObject.Find('框3名称')的方式找到 ‘框3’,这时找到的是本道题的  ‘框3’,并把用户对应的答案显示回找的的 ‘框3’,当本道题的 ‘框3’删除了,留下的是你所看到的上一道题的  ‘框3’(空的,本来该有的,却变成啥也没有)

     

    解决办法,就行删除时,不让它另外开道进行删除,说白了,就是第一步就彻底删完,不删除就不执行第二步,这时DestroyImmediate就派上用场了,把使用Destroy的地方替换为DestroyImmediate

     

    本以为一切都结束时,又踩了一个不该踩的坑。

    我使用的方法是: 找到  ‘框’的父游戏物体,是上面第一张图 中的  AnswerPanel,然后删除AnswerPanel下的所有子物体(除了 '框1'),代码如下:

    private RectTransform  _AnswerPanelTransform;
    
     _AnswerPanelTransform = GameObject.Find("AnswerPanel").GetComponent<RectTransform>();
    
            //每次绘制前,都把上一次绘制的删除
            for (int childIndex =0; childIndex< _AnswerPanelTransform.childCount; childIndex++)
            {
                if (_AnswerPanelTransform.GetChild(childIndex).gameObject.name != "AnswerPanel1")
                {
                    GameObject.DestroyImmediate(_AnswerPanelTransform.GetChild(childIndex).gameObject);
                }
               
            }

    不知你有没有发现问题所在,是真的能够全部删除(除了'框1')吗?答案是非也,AnswerPanel每删除一个子物体,它的childCount值就减少1,就好像是你要删除一个List中的一个元素一样,当List中有10个对象的时候,如果RemoveAt掉了第0个,那么后面的9个对象都会向前移动。

     

    解决办法是:设置childIndex的初始值为:_AnswerPanelTransform.childCount-1,代码如下:

     private RectTransform  _AnswerPanelTransform;
    
     _AnswerPanelTransform = GameObject.Find("AnswerPanel").GetComponent<RectTransform>();
    
            //每次绘制前,都把上一次绘制的删除
            for (int childIndex = _AnswerPanelTransform.childCount-1; childIndex >=0; childIndex--)
            {
                if (_AnswerPanelTransform.GetChild(childIndex).gameObject.name != "AnswerPanel1")
                {
                    GameObject.DestroyImmediate(_AnswerPanelTransform.GetChild(childIndex).gameObject);
                }
               
            }

     

    好了,到此,结束完毕

     

    展开全文
  • unity中的destroy

    千次阅读 2014-09-11 14:54:07
    unity中提供了销毁对象的三种方法:

    unity中提供了销毁对象的三种方法:

    1. Destroy方法
    2. DestroyImmediate方法
    3. DontDestroyOnLoad方法
    Destroy方法:
    static void Destroy(Object obj, float t = 0.0F);
    删除一个游戏物体或组件等。如果Object实际上为组件,则会将其从gameobject中删除并销毁;如果实际上为gameobject则将销毁它的全部组件及其所有子物体~可以指定多长时间后销毁,当然实际上销毁总是存在一定的延迟的,延迟到当前更新循环后和渲染之前。

    销毁组件~
    public class DestroyTest : MonoBehaviour {
    
    	// Use this for initialization
    	void Start () {
    	
    	}
    	
    	// Update is called once per frame
    	void Update () {
    		var collider = gameObject.GetComponent<Collider>();
    		if (collider)
    		{
    			Debug.Log("collider exists");
    			Destroy(collider);
    		}
    	
    	}
    }
    原来运行后


    销毁该对象(无子对象情况)~
    public class NewBehaviourScript : MonoBehaviour {
    	void Start () {
    		var cylinder = GameObject.CreatePrimitive (PrimitiveType.Cylinder);
    	}
    
    	void Update () {
    		var cylinder = GameObject.Find("Cylinder");
    		if (!flag && cylinder)
    		{
    			flag = true;
    			Debug.Log("cylinder exists~");
    			Destroy(cylinder);
    		}
    	}
    	bool flag = false;
    }

    并且Hierarchy中不存在Cylinder对象~

    销毁该对象及子对象的一切~
    var cube = GameObject.Find("Cube");
    if (cube)
    {
    	flag = true;
    	Debug.Log("cube exists");
    	Destroy(cube);
    }
    原先:运行后:



    DestroyImmediate方法:
    static void DestroyImmediate(Object obj, bool allowDestroyingAssets = false);
    尽量使用Destroy,该函数在写编辑器代码时使用,延时的销毁永远不会在编辑模式下调用。务必小心的是,该函数会将资源永久销毁,绝不要遍历数组然后依次销毁遍历的元素。其中,allowDestroyingAssets如果设置为TRUE则资源就允许被销毁~

    DontDestroyOnLoad方法:
    static void DontDestroyOnLoad(Object target);
    作用是在加载新场景的时候使目标物体不被自动销毁~
    当加载一个新关卡时,所有场景中的所有的物体都会被销毁,然后新关卡中的物体被加载进来,为了保持在加载新关卡时物体不被销毁,使用DontDestroyOnLoad保持,如果物体是一个组件或游戏对象,则所有的Transform层次都不会被销毁,全部保留下来。


    还发现了一个现象,就是Object中的静态函数在程序中调用的时候,可以直接调用,不用写类名,当然写了也没有错,其他类的静态函数一定要写类名.函数名()来调用静态函数。

    展开全文
  • 事情是这样的,遇到了一个问题: 使用vue进行开发的时候,在一个组件中使用事件总线进行事件监听之后,当组件销毁后该事件依然被监听。 背景 vue对于跨组件的事件监听处理有一个逐渐变迁的过程。...
  • unity Destroy的使用

    千次阅读 2018-03-07 10:49:07
    GameObject obj= GameObject.CreatePrimitive(PrimitiveType.Cube); Destroy(obj); //物体 Destroy(this); //脚本 Destroy(transform.GetComponent&lt;createprim&gt;()); //...
  • 首先我们来说一下什么是生命周期 平时我们在开发软件的时候软件就有生命周期,同样 很多的事物都有自己的生命周期 一般来说 生命是不由自己的主观意识控制的。 举个例子 :人的生命周期:从出生——》到长大——》到...
  • session_unset()和session_destroy()用法分析

    千次阅读 2014-08-22 16:41:17
    关于session_unset()和session_destroy()的函数使用进行介绍。 session_unset() 释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id session_destroy() 删除...
  • Destroy销毁场景中的物体,但内存中还存在,当令它需要销毁时,只是给一个标识。而内存中它依然是存在的,只有当内存不够,或一段时间没有再次被引用时(或者更多合理的条件满足),机制才会将它销毁并释放内存。 ...
  • unity3d销毁游戏对象 如何在Unity 3D中销毁游戏对象 (How to Destroy Game Objects in Unity 3D) As important instantiating and modifying gameObjects is in a game, it's equally important to destroy them ...
  • 假设页面中存在多张图片,要求在删除图片的同时可以还原该图片...该用哪种方法?初次接触, 希望了解的能够帮忙解答下,谢谢~
  • Spring + mybatis 配置中如果缺少 scope="prototype"属性会报Warn:Invocation of destroy method 'close' failed on bean with name 'sqlSession'
  • servlet在什么时候调用destroy()方法

    万次阅读 2012-07-09 19:33:42
    destroy方法在容器移除servlet 时执行,同样只执行一次。这个方法会在所有的线程的service()方法执行完成或者超时后执行,调用这个方法后,容器不会再调用这个servlet的方法,也就是说容器不再把请求发送给这个...
  • 问题:Invocation of destroy method failed on bean with name 'scopedTarget.eurekaClient': org.springframewo   解决办法:在pom文件中,增加如下依赖。 &lt;dependency&gt; &lt;groupId&...
  • unity3d Object.Destroy 销毁

    万次阅读 2013-02-21 14:49:56
    static function Destroy (obj : Object, t : float = 0.0F) : void Description描述 删除一个游戏物体,组件或者资源。 物体obj现在被销毁或在指定了t时间过后销毁。如果obj是组件,它将从GameObject销毁组件...
  • Disconnected from the target VM, address: ‘127.0.0.1:51937’, transport: ...Invocation of destroy method failed on bean with name ‘scopedTarget.eurekaClient’: org.springframework.beans.factory.Be...
  • 1. 一个gameObject被destroy,如何判断操作已经完成? 我试过gameObject == null 也试过 !gameObject 都不行是我的方法错了吗。 2. destroy删除后的游戏对象的内存是否被完全释放了,如果没有,我们如何...
  • 参考:... tomcat启动错误提示Failed to destroy end point associated with ProtocolHandler 导致这个错误我这边的问题就是: springmvc /*.do --这里配
  • When a thread attributes object is no longer required, it should be destroyed using the pthread_attr_destroy() function. Destroying a thread attributes object has no effect on threads
  • 【Unity】Destroy和DestroyImmediate的区别

    万次阅读 2017-06-07 15:55:14
    情景:有一个父物体A,A有子物体B1.B2.B3……B10等10个子物体 那么现在若想移除B1—B10,该如何? 我能想到的最简单是这样做 using UnityEngine; using System.Collections; /// <summary> ...
1 2 3 4 5 ... 20
收藏数 317,008
精华内容 126,803
关键字:

destroy