菜鸟教程小白 发表于 2022-12-12 08:54:11

ios - 希望使用 ARC 自动释放生命周期


                                            <p><p>在 iOS 上过渡到 ARC。</p>

<p>我有一个自动释放的 NSString,我用它来生成 UTF-8 表示,并依靠池生命周期来保持 UTF-8 指针的事件:</p>

<pre><code>char *GetStringBuffer(something)
{
    NSString *ns = ;
    return ;
}
</code></pre>

<p><code>something</code> 的性质在这里并不重要。</p>

<p>Pre-ARC 规则确保返回的数据指针在当前自动释放池的生命周期内保持有效。至关重要的是,我没有随身携带 NSString 指针。</p>

<p>现在,在ARC下,函数返回时字符串不会被释放吗?我认为 ARC 不会将 NSString 内部结构的 <code>char *</code> 视为强引用,尤其是考虑到它从未被显式释放。</p>

<p>这里最好的 ARC 成语是什么? </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果你想保证 <code>UTF8String</code> 的返回值在当前自动释放池被耗尽之前是有效的,你有两种选择:</p>

<ol>
<li><p>在 <a href="https://stackoverflow.com/q/6646052/77567" rel="noreferrer noopener nofollow">compiled with ARC disabled</a> 的文件中定义 <code>GetStringBuffer</code> .如果 <code>stringWithSomething:</code> 遵循约定,它必须返回一个自动释放的 <code>NSString</code> 给非 ARC 调用者。如果没有(例如,它的行为类似于 <code>-</code>),您可以显式 <code>retain</code> 和 <code>autorelease</code> 它。</p ></li>
<li><p>使用免费桥接和<code>CFAutorelease</code>:</p>

<pre><code>char *GetStringBuffer(something) {
    NSString *ns = ;
    CFAutorelease(CFBridgingRetain(ns));
    return ;
}
</code></pre> </li>
</ol></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 希望使用 ARC 自动释放生命周期,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32635847/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32635847/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 希望使用 ARC 自动释放生命周期