![]() |
1
13
好吧,你可以绕过它,但问题是你是否真的想要它。 如果您想使用接口,最好完全使用它们。因此,正如您所经历的,如果混合类和接口变量,就会出现问题。
现在您有了对接口的第二个引用,丢失第一个引用不会释放对象。 同时尽可能保留类和对象:
确保在创建对象后立即设置接口。 如果您真的想禁用引用计数,只需创建一个新的Tobject子代来实现iInterface。我在D2009中测试了下面的示例,它可以工作:
FreeRef只是像释放一样降低refCount。你可以在你通常免费使用的地方使用它。 |
![]() |
2
7
不要从
|
![]() |
3
7
不要从 TInterfacedObject ,而不是从 TSingletonImplementation 从标准 System.Generics.Defaults 单位。
|
![]() |
4
4
要禁用引用计数,addref和release只应返回-1。
在没有引用计数的接口中有很多实用程序。如果使用引用计数,则不能将对象引用和接口引用混合使用,因为会发生坏事情。通过禁用引用计数,您可以愉快地混合接口和对象引用,而不用担心对象突然自动销毁。 |
![]() |
5
3
禁用此类问题的引用计数闻起来很糟糕。 一个更好的体系结构解决方案是使用某种“单例”模式。 最简单的实现方法如下:
顺便说一下:当你使用接口时:总是使用接口变量!不要混合两个类en接口变量(使用“var设置:imysettings”而不是“var设置:tdatabasesettings”)。否则,引用计数将妨碍您(自动销毁、指针操作无效等)。 在上面的解决方案中,gdatabasesettings也是“imysettings”类型,因此它得到了一个适当的引用计数,并将持续到程序终止。 |
![]() |
6
0
或者使用下面的代码: var I: IMyInterface; begin I := ...; ... Do whatever you want in a scope; Initialize(I); //- this will clear the interface variable without calling the _release. end. |
![]() |
Some1Else · 函数在Delphi中重新创建TForm 3 年前 |
![]() |
Agmcz · Delphi安卓库。so未安装(AAB) 3 年前 |
![]() |
nader · 如何使用delphi在web上提交表单 6 年前 |
![]() |
kwadratens · Delphi中的卡方分布函数代码 7 年前 |
|
user9672569 · 如何在完整的位图图像中绘制阴影效果? 7 年前 |
![]() |
mmmm · MSBuild(用于Delphi)Make-like功能 7 年前 |