【发布时间】:2019-08-14 01:12:44
【问题描述】:
我不知道如何删除TChart。这必须很简单,但我没有看到它。在下面的 TListView ButtonClick 代码中,我从活动的 TChart 中删除了一个系列,如果该系列恰好是最后一个系列,那么我想删除整个 TChart。
TComponent *T; // find chart and delete the selected series
for (int i = 0; i < (Form1->ComponentCount); i++) {
T = Form1->Components[i];
if (T->ClassName() == "TChart") {
int test = T->Tag;
if (test == TappedChartTag) { //TappedChartTag is global
if (TChart *TC = dynamic_cast<TChart *>(T)) {
TC->RemoveSeries(AItem->Index); // this removes the series
if (TC->SeriesCount()==0) { // if this was last series, delete chart
TC->CleanupInstance();
}
}
}
}
}
我找不到完全摆脱TChart 的方法。 TC->CleanupInstance(); 将其完全擦除(看不到任何东西),但 TChart 仍然存在。
我在 Embarcadero Rad Studio(C++ Builder 10.3 Update 1)工作。
更新:我尝试用delete TC; 代替TC->CleanupInstance();,它适用于Win32,但不适用于iOS。
【问题讨论】:
-
由于ARC reference counting,
delete TC;不适用于 iOS(和 Android)。TC是对TChart对象的活动引用,因此在分配TC时它的引用计数会增加。之后调用delete TC;只会减少引用计数,但其他地方还有其他活动引用,这就是对象实际上没有从内存中释放的原因。
标签: firemonkey c++builder teechart