如何跟踪对象的引用?

2023-12-27

在手动内存分配和指针仍然占主导地位的世界中(Borland Delphi),我需要一个通用的解决方案来解决我认为的普遍问题:

在给定时刻,可以从多个位置(列表、其他对象……)引用一个对象。有没有一种好方法来跟踪所有这些引用,以便我可以在对象被销毁时更新它们? ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­


如果您想通知其他人更改,您应该实施“观察者模式” http://en.wikipedia.org/wiki/Observer_pattern。 Delphi 已经为 TComponent 后代完成了这项工作。您可以调用 TComponent.FreeNotification 方法,并在其他组件被销毁时通知您的对象。它通过调用Notification 方法来实现这一点。您可以通过调用 TComponent.RemoveFreeNotification 将自己从通知列表中删除。另请参阅这一页 http://delphi.about.com/library/bluc/text/uc083101a.htm.

大多数垃圾收集器不允许您获取引用列表,因此在这种情况下它们无济于事。如果您使用接口,Delphi 可以进行引用计数,但是您需要自己跟踪引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何跟踪对象的引用? 的相关文章

  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 在 Delphi 2009 上安装最新版本的 Indy 10 [重复]

    这个问题在这里已经有答案了 是否有更新 Delphi 2009 中的 Indy 10 组件的分步指南 我读过正在卸载线程 https stackoverflow com questions 486210 what is the proper
  • 如何为抽象工厂创建的类设置特定属性?

    是否可以让具体工厂使用抽象工厂模式为其创建具有特定类型参数的具体类 或者由各自的具体工厂创建的不同具体类是否需要具有相同的字段 例如 在下图中 您将如何使用客户端 应用程序 给出的不同参数集来实例化 WinButton 和 OSXButto
  • 树的递归和非递归过程

    我们知道树是递归数据结构 我们在编写树的过程中使用递归 例如BST的删除方法等 递归的好处是 我们的程序变得非常小 例如中序遍历的代码只有4或5行 而不是非递归程序 虽然会很长 但从理解的角度来看 不像递归程序那么复杂 这就是为什么我讨厌递
  • 检查一个类是否是另一个类的子类

    我想在不创建实例的情况下检查一个类是否是另一个类的子类 我有一个类 它接收类名作为参数 作为验证过程的一部分 我想检查它是否属于特定的类系列 以防止安全问题等 有什么好的方法可以做到这一点吗 is subclass of http php
  • 如何释放 TInterfacedObject 中的 TObject 成员

    我知道接口对象是引用计数的 因此不需要手动释放它 但如果它有一个 TObject 继承成员 我是否应该在析构函数中手动释放该成员 考虑以下代码 program Project2 APPTYPE CONSOLE R res uses Syst
  • 使用元类的 __call__ 方法而不是 __new__?

    在讨论元类时 the docs http docs python org reference datamodel html state 您当然也可以重写其他类方法 或添加新的 方法 例如定义一个自定义 call 方法中的 元类允许在调用类时
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • 如何在Delphi中将对象方法作为参数传递,然后调用它?

    我担心这可能是一个有点愚蠢的问题 但这让我很难过 我正在寻找将对象的方法传递到过程中的最简单的方法 以便过程可以调用对象的方法 例如 超时后 或者可能在不同的线程中 所以基本上我想 捕获对对象方法的引用 将该引用传递给过程 使用该引用 从过
  • 使用 NSError 检查错误的正确结构

    我正在编写各种例程 并尽力保持其整洁和重构 我正在创建的方法开始看起来与此代码类似 IBAction buttonPress id sender Create Document Shopping List with this documen
  • Delphi - 如果没有创建类,为什么这个函数可以工作?

    考虑这个类 unit Unit2 interface type TTeste class private texto string public function soma a b integer string end implementa
  • 在javascript中访问函数内的实例变量?

    如何以最简单的方式访问函数内的实例变量 function MyObject Instance variables this handler Methods this enableHandler function var button doc
  • 什么是对象序列化和反序列化?

    什么是对象序列化 and 反序列化 序列化与读取对象的属性 然后用它们填充 DataRow 的列 最后将 DataRow 保存在数据库中等普通技术有什么区别 序列化通常是指创建可用于存储 可能在文件中 通过网络传输或仅用于进程之间传输的数据
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 接口中的构造方法

    接口中的构造方法不好吗 为什么人们认为有人想要实例化接口 我们想要做的是强制实现者实现构造函数 就像其他接口方法一样 接口就像一个合同 假设我有一个接口 Queue 并且我想确保实现者创建一个带有一个参数的构造函数 该构造函数创建一个单例队
  • 防止Java实例化的正确方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何决定使用 IS A 还是 HAS A Relation

    public class B public String getMe return Some 假设我有一个上面的类 我们应该通过哪些参数来决定使用什么 是否是一个或有一个关系 HAS A public class A public stat
  • 使用面向对象的分析和设计对电梯进行建模[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当涉及到面向对象的设计和分析时 有一组问题似乎在面试和课堂上很常见 这是其中之一 不幸的是 我在大学的 OOP 教授从未真正给出过答案 所以我一
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 从其可执行文件的路径获取服务名称

    我有一个可执行文件的路径 它是一个正在运行的服务应用程序 例如 C Program Files x86 Someapp somesvc exe 我想停止并启动它 为此我想我需要获取服务的名称 如下所示 this https stackove

随机推荐

  • UIPageControl 中的问题

    pageControl UIPageControl alloc initWithFrame CGRectMake 153 356 38 36 pageControl userInteractionEnabled YES pageContro
  • Google Maps SDK 中的自定义注释视图

    我创建了一个基于地图的 iOS 应用程序 其中我想使用 iOS 版 Google Maps SDK 而不是 Mapkit 我找到了文档 但没有找到与自定义注释视图相关的方法 任何人都可以为我提供解决方案创建自定义注释视图 信息窗口 以及如何
  • 在数学模式下将变量写为下标

    我正在尝试绘制一些数据 使用 for 循环来绘制分布 现在我想根据循环计数器将这些分布标记为数学符号中的下标 这就是我现在的处境 import matplotlib pyplot as plt import numpy as np impo
  • ASP.NET MVC 使用 UIHint 属性生成 DropDownList

    我想知道如何使用 UIHint 属性生成 DropDownList 我已经自定义了一些预定义属性 但我不知道如何继续生成 DropDownList 这是我对上一个的处理方式 我想以类似的方式使用它 public class CartProd
  • 使用 apache 检查请求中是否存在标头

    如何检查标头是否存在 我不想检查该值是否与 不同 我想使用以下方法检查它是否确实存在 重写条件 我怎样才能在 htaccess 文件中做到这一点 anhubhava 的回答很有用 但逻辑 颠倒了 它应该是 RewriteEngine On
  • Selenium 使用 javascript 获取元素的类属性

    我正在使用 Selenium 用 Ja vascript 编写测试自动化 尝试提取 DOM 元素的类属性对我来说不起作用 这是我的代码 var webdriver require selenium webdriver var driver
  • Java中的顶级类是什么?

    Java中的顶级类是什么 Java中顶级类的定义是什么 我知道这是一个基本问题 但我找不到这个问题的明确而简单的答案 它只是任何不是嵌套类的类 如果您的文件是 Foo java 并且您的类是 Foo 那么它是顶级类 in Foo java
  • iOS:popViewController 意外行为

    我一直在互联网上寻找解决方案 我什么也找不到 所以 我正在使用 UINavigationController 我将两个 UIViewController 推到上面 在第二个推送的 ViewController 中 我正在执行以下代码 voi
  • 在 iOS 6 中,UIViewController 是否可以支持比其父级更多的界面方向?

    iOS 6 中自动旋转的变化似乎让这变得异常困难 或者说不可能 他们似乎在推行这样的理念 子视图控制器不应覆盖其父视图控制器的自动旋转行为 这使得很难完成我想做的事情 我有一个必须纵向显示的视图控制器 它以模态方式推动另一个视图控制器 它是
  • 上下文切换死锁

    在 VS 2008 中调试我的程序时 我遇到了以下错误 CLR 在 60 秒内无法从 COM 上下文 0x34fc1a0 转换到 COM 上下文 0x34fc258 拥有目标上下文 单元的线程很可能执行非泵送等待或处理非常长时间运行的操作而
  • 将原子 int 向量转换或转换为 int 向量的有效方法

    我确实有一个整数向量 我想确保增量操作发生线程安全 所以我使用std vector
  • 计时器不定期更新并“跳过”一秒(Silverlight 4 DispatcherTimer)

    对于以下问题 我希望得到一些帮助 您可以在我的网站上看到这个问题现场扑克百叶窗计时器 http www pokerdiy com poker blinds timer aspx 主时钟 盲定时器倒计时 从 20 00 开始 然后跳转到 19
  • 自定义 UINavigationController UIToolbar 背景图片

    我有一个 iPhone 应用程序使用UINavigationController并希望使用自定义背景图像自定义元素 我能够为UINavigationController s UINavigationBar使用 Objective C 类别很
  • Android 推送通知

    我参考了链接a link http www vogella de code de vogella android c2dm codestartpage html开发推送通知 但在运行时向我显示 UI main xml 我应该如何创建推送通知
  • 单击时选项菜单不会显示第一个选项(Tkinter)

    我添加了一个OptionMenu小部件到我的代码 并分配一个列表作为它的选项 事情是这样的 z StringVar z set userList 0 usersOption OptionMenu frame1 z userList comm
  • head() 函数在“for”循环中不起作用?

    我尝试使用 for 循环打印出几行 这是代码 奇怪的是它不适用于 head 函数 如果我更换它就可以了head with print kw id c a b keyword text data frame col c a b col2 c
  • 为什么 TFS 忽略我的解决方案中的项目?

    我的解决方案中有多个项目位于 TFS 2010 存储库中 最近几天 我向此解决方案添加了大约 5 个新项目 我发现对于其中一个项目 项目文件本身不会签入 TFS 该项目中包含的所有工件都工作正常 他们已签入 我可以在团队资源管理器中看到他们
  • 错误代码 220 - 尝试转发时“您的凭据不允许访问此资源”

    当我试图得到https api twitter com 1 1 statuses retweets 21947795900469248 json https api twitter com 1 1 statuses retweets 219
  • 我可以在 iOS 7 上手动提示用户登录 Game Center 吗?

    根据 Apple 的 Game Center 编程指南 此代码设置了一个身份验证处理程序 如果您在游戏开始时运行此命令 第一次运行它时 如果用户尚未登录 它将提示用户登录 void authenticateLocalPlayer GKLoc
  • 如何跟踪对象的引用?

    在手动内存分配和指针仍然占主导地位的世界中 Borland Delphi 我需要一个通用的解决方案来解决我认为的普遍问题 在给定时刻 可以从多个位置 列表 其他对象 引用一个对象 有没有一种好方法来跟踪所有这些引用 以便我可以在对象被销毁时