ios - 在调用 NSMutableDictionary.Create 之后我们需要调用 release 吗?
<p><p>在阅读了 Dalija Prasnikar 的精彩帖子后 <a href="https://stackoverflow.com/questions/52314334/ios-objective-c-object-when-to-use-release-and-when-to-not-use-it" rel="noreferrer noopener nofollow">iOS objective-c object: When to use release and when to not use it</a>我学会了:</p>
<blockquote>
<p>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.</p>
</blockquote>
<p>但是 create 呢?例如做 <code>myDict: = TNSMutableDictionary.Create</code> 我以后需要调用 <code>myDict.release</code> 吗?</p>
<p>两者有什么区别</p>
<pre><code>TNSMutableDictionary.Wrap(TNSMutableDictionary.Wrap(TNSMutableDictionary.OCClass.alloc).init);
</code></pre>
<p>和</p>
<p><code>TNSMutableDictionary.Create</code> ?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p><strong>简答:</strong>是的,如果你使用了<code>Create</code>(<code>TNSMutableDictionary.Create</code>),你需要调用<code>release</code> </p>
<p>对于对象的构造,你使用哪种变体并不重要,但更短的总是更易读。而且你可以在你的 Objective-C 版本中进行许多包装。</p>
<hr/>
<h3>构建对象实例 Delphi vs Objective-C</h3>
<p>在 Objective-C 上构造对象的过程与
Delphi 对象实例的构造过程。 </p>
<p>虽然 Delphi 通过调用构造函数来一次性构造对象,该构造函数触发对象实例的内存分配然后初始化对象,但在 Objective-C 中该过程分为两个步骤。一种是内存分配,通过
<code>alloc</code> 方法,接下来是通过各种命名的 <code>init</code> 完成的初始化
方法。这两者都是 Delphi 构造函数的不同部分的近似等价物。 </p>
<p>但这还不是全部。 Objective-C 也有 <code>new</code> 将 <code>alloc</code> 和 <code>init</code> 合二为一,类似于 Delphi 的构造函数。但是,<code>new</code> 只调用默认构造函数,如果需要使用自定义构造函数,则需要使用 <code>alloc</code> + <code>initxxx</code> 变体。为了代码的一致性,Objective-C 开发人员通常更喜欢 <code>alloc</code> + <code>init</code>,即使他们可以使用 <code>new</code>。</p>
<h3>Objective-C 对象的 Delphi 包装器</h3>
<p>Delphi 通过通用包装类将 Objective-C 对象作为原始指针访问。该类提供了几个类方法来更容易地实例化 Objective-C 对象。 </p>
<p><code>Create</code>相当于调用<code>alloc.init</code>或<code>new</code>,调用默认
初始化,而 <code>Alloc</code> 相当于调用 <code>alloc</code>,之后我们必须调用适当的初始化例程 - 一些 <code>initxxx</code> 或默认 <code>初始化</code> </p>
<p><code>Wrap</code> 方法用于包装 OS 提供的已构造对象实例并保持该对象实例存活,我们必须调用 <code>retain</code>,完成后 <code>发布</code>。 </p>
<p>但是,如果您使用 <code>Wrap</code> 仅将 <strong>您创建的对象实例</strong> 与 <code>alloc.init</code> 变体或 <code>new</code>,那么你不应该调用<code>retain</code>,你必须调用<code>release</code>。</p></p>
<p style="font-size: 20px;">关于ios - 在调用 NSMutableDictionary.Create 之后我们需要调用 release 吗?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/53757332/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/53757332/
</a>
</p>
页:
[1]