ios - 在调用 NSMutableDictionary.Create 之后我们需要调用 release 吗?

标签 ios delphi firemonkey

阅读 Dalija Prasnikar 的精彩帖子后 iOS objective-c object: When to use release and when to not use it我了解到:

Methods whose name begins with alloc, new, copy, or mutableCopy don't require calls to retain. On the contrary, if you call it you will create a memory leak because there will be one retain too many. But they do require release or autorelease. Those object instances are the ones you have created, and under Objective-C they are automatically retained when constructed.

但是创建呢?例如做 myDict: = TNSMutableDictionary.Create 我需要稍后调用 myDict.release 吗?

究竟有什么区别

TNSMutableDictionary.Wrap(TNSMutableDictionary.Wrap(TNSMutableDictionary.OCClass.alloc).init);

TNSMutableDictionary.Create ?

最佳答案

简答:是的,如果您使用了Create (TNSMutableDictionary.Create),则需要调用release

对于对象的构造,使用哪种变体并不重要,但更短的变体总是更具可读性。在您的 Objective-C 版本中,您可以进行许多包装。


构建对象实例 Delphi vs Objective-C

在 Objective-C 上构造对象的过程与 构造 Delphi 对象实例的过程。

虽然 Delphi 一次性构造对象,通过调用构造函数触发对象实例的内存分配,然后初始化对象,但在 Objective-C 中,该过程分为两个步骤。一种是内存分配,用 alloc 方法,接下来是通过各种命名的 init 完成的初始化 方法。这两个都是 Delphi 构造函数的不同部分的近似等价物。

但这还不是全部。 Objective-C 也有 newallocinit 结合在一起,类似于 Delphi 的构造函数。但是,new 仅调用默认构造函数,如果您需要使用自定义构造函数,则需要使用 alloc + initxxx 变体。为了代码的一致性,Objective-C 开发人员通常更喜欢 alloc + init,即使他们可以使用 new

用于 Objective-C 对象的 Delphi 包装器

Delphi 通过通用包装类以原始指针的形式访问 Objective-C 对象。该类提供了几个类方法,以便更轻松地实例化 Objective-C 对象。

Create 相当于调用 alloc.initnew,并调用 default 初始化,而 Alloc 相当于调用 alloc,之后我们必须调用适当的初始化例程 - 一些 initxxx 或默认 初始化

Wrap 方法用于包装操作系统提供的已经构造的对象实例并保持该对象实例存活我们必须调用 retain,完成后 发布

但是,如果您使用 Wrap 只是将您创建 的对象实例与alloc.init 变体或new,那么你不应该调用retain,你必须调用release

关于ios - 在调用 NSMutableDictionary.Create 之后我们需要调用 release 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53757332/

相关文章:

ios - Telnet 得到空输出并且没有登录名/密码

android - 如何确定地理坐标附近是否存在街道或地址?

freepascal - Turbo Pascal 中数组的内存布局

delphi - Firemonkey TTreeView - 在 TTreeViewItems、TValue 中存储对象引用

sqlite - 在Firedac Sqlite数据库连接上插入后如何制作事件?

ios - Delphi XE4 FireMonkey/iOS DrawBitmap 不工作

ios - 在在线游戏服务器上验证 Game Center 玩家

ios - 从 AirPod 麦克风录制音频

ios - 如何在 Swift 中创建一个内联字典,同时忽略可能为 nil 的可选值?

delphi - POP3 断开连接不起作用