2012-05-12 23 views
7

命令clear classes清除當時加載到內存中的所有類定義。清除MATLAB中的類定義

是否可以只清除特定的類定義?

編輯:我很有興趣從內存中刪除特定類定義而不是類實例。

回答

4

我就遇到了這個問題我自己,當我寫我的新HPF類。所以我嘗試了一些東西,因爲當我正在調試新課程時,我做了許多修改,然後測試。

「清除功能」不起作用。我甚至嘗試過「清除hpf」。但清除所有實例似乎是這樣做的。例如:

>> x = hpf(3); 
>> x+2 
ans = 
5 

>> whos 
    Name  Size   Bytes Class  Attributes 

    ans  1x1    248 hpf     
    x   1x1    248 hpf     
    y   1x1     8 double    

所以現在我對班級做了一個小小的修改並保存了下來。

>> z = hpf(17); 
Warning: The class file for 'hpf' has been changed; but the change cannot be applied because objects based on the old class file still exist. If you use 
those objects, you might get unexpected results. You can use the 'clear' command to remove those objects. See 'help clear' for information on how to remove 
those objects. 

>> clear functions 
>> clear hpf 
>> clear x 
>> clear z 
>> x = hpf(3); 
Warning: The class file for 'hpf' has been changed; but the change cannot be applied because objects based on the old class file still exist. If you use 
those objects, you might get unexpected results. You can use the 'clear' command to remove those objects. See 'help clear' for information on how to remove 
those objects. 

所以我仍然得到一個警告,告訴我MATLAB仍然有問題。但是,我仍然在內存中有一個很容易被遺忘的HPF實例。

>> clear ans 
>> clear x 
>> whos 
    Name  Size   Bytes Class  Attributes 

    y   1x1     8 double    

>> x = hpf(3); 
>> x+23 
ans = 
26 

只要我也刪除那個實例,MATLAB不再給我一個警告。請注意,我從來不必發出「清除類」命令。變量y是雙重的,仍然存在以證明這一事實。

+0

爲了完整我想補充一點,實例也可以隱藏在圖形和其他圖形對象的userdata組件中。這些不會與whos一起出現。 – bdecaf

+1

不幸的是,這不是完全清除類定義。例如,即使在所有實例已被刪除之後,常量屬性數據仍保留在內存中。 –

1

這是做這件事:

%設定ClassName用來匹配情況下,您希望清除類的名稱。

ClassName = 'MyClass'; 

%下面的代碼:

VarsStruct = whos; 
VarsCellArray = cat(3, cellstr(char(VarsStruct(:).name)), cellstr(char(VarsStruct(:).class))); 
ClassInstanceIndices = find(ismember(VarsCellArray(:,:,2), ClassName)); 
ClassInstanceNames = VarsCellArray(ClassInstanceIndices,:,1)'; 
clear(ClassInstanceNames{:}); 
+0

我想清除類*定義*,而不是類實例。當然,首先清除類實例是絕對必要的,但我已經知道如何去做。 – niels

0

要清除類的定義,包括所有的常量屬性數據,有必要從內存

  • 問題clear classname一舉兩得之類的以下

    1. 清除所有實例。

    它必須按上述順序完成。反轉該命令將使常量屬性數據卡在內存中(從R2013b開始),直到發出clear classes

  • +0

    'clear'應該可以正常工作,以清除各個實例,而不管它們包含什麼。 –

    +0

    *是的,但在前面的評論中描述的情況下,它似乎不起作用。你嘗試過嗎?*很多次。應用'clear'時,應該自動調用屬性的delete()方法。如果你遇到了一個異常的例子,你應該啓動一個線程來演示它,以便更好地檢查它。沒有其他提到的記錄,AFAIK,但它很容易測試。使用包含大數組的常量屬性創建類實例。在Windows上,您可以在Tsk Mgr中看到,即使在刪除對象後,Constant屬性中的內存也不會被取消分配。 –

    +0

    這很奇怪,因爲我也嘗試了很多次。假設'myobj'是一個(句柄)類實例,'myproperty'是其中一個包含另一個(句柄)類實例的屬性,調用'clear myobj.myproperty'似乎什麼也不做。如果清除this.myproperty在myobj的一個方法中調用,情況也是如此。但是,調用'myobj.myproperty.delete'似乎實際上按預期刪除了該對象。 – niels