• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:19:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在阅读了 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.

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

两者有什么区别

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

TNSMutableDictionary.Create ?



Best Answer-推荐答案


简答:是的,如果你使用了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,调用默认 初始化,而 Alloc 相当于调用 alloc,之后我们必须调用适当的初始化例程 - 一些 initxxx 或默认 初始化

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

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap