菜鸟教程小白 发表于 2022-12-13 09:29:24

iphone - 内存管理怪癖!关于 NSNumber


                                            <p><p>我最近一直在涉足Objective C,到目前为止,内存管理和理解它的细微差别是一个挑战。 </p>

<p>我理解我创建的每一个对象,我都有它的所有权,并且一旦我用完它就必须释放它? (如果我错了,请纠正)。进入核心问题:</p>

<p>假设我有一个名为 <code>-(void)doSomething;</code> 的方法/消息
该接口(interface)有一个 bool 变量,比如turn,<code>doSomething</code>需要利用turn的值来改变<code>NSMutableArray</code>中存在的值,效果如下:</p>

<pre><code>[ replaceObjectAtIndex:1 withObject:turn];
</code></pre>

<p>很明显,这是行不通的,因为 'turn' 不是一个对象。所以我相信前进的方向是创建一个初始化为 <code>BOOL</code> 值的 <code>NSNumber</code> 对象,依次使用该值。 </p>

<p><code>-(void)doSomething</code> 消息被多次传递。这意味着每次将其发送到接收者时,都会重新创建 <code>NSNumber</code> 对象并更改其值(我认为这对我来说是疯狂的地方)。 </p>

<p>我的问题,现在我应该在每次向接收者发送消息时释放 <code>NSNumber</code> 对象吗?本质上,我需要一个关于我所预见的内存管理挑战的脑筋急转弯!!!</p>

<p>P.S: 写出来,我确实认为我应该在每次消息调用结束时释放对象,但既然我是打出来的,我也希望得到你的意见。</p>

<p>谢谢大家! </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>NSArrays 处理自己的内存管理。一旦将对象添加到数组中,它将保留它,直到从数组中删除为止。</p>

<pre><code>[ replaceObjectAtIndex:1 withObject:turn];
</code></pre>

<p>在这里,您已将“转”添加到数组中,因此它将保留它。如果您拥有此对象的所有权,您现在可以释放它;如果您使用方便的方法创建它,它已经自动发布了。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 内存管理怪癖!关于 NSNumber,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7842690/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7842690/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 内存管理怪癖!关于 NSNumber