gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:18:10 25 4
gpt4 key购买 nike

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

我理解我创建的每个对象,我都拥有它的所有权,并且在我使用完它后我必须释放它? (如果我错了,请纠正)。进入核心问题:

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

[[matrix objectAtIndex:1] replaceObjectAtIndex:1 withObject:turn]; 

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

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

我的问题是,现在我是否应该在每次将消息发送给接收者时释放 NSNumber 对象?本质上,我需要在这里就我预见的内存管理挑战进行大量的头脑 Storm !!!

P.S:写这篇文章,我确实认为我应该继续在每次消息调用结束时释放对象,但既然我把它打出来了,我也希望得到你的意见。

谢谢大家!

最佳答案

NSArrays 处理他们自己的内存管理。将对象添加到数组后,它将保留该对象,直到将其从数组中删除。

[[matrix objectAtIndex:1] replaceObjectAtIndex:1 withObject:turn];

此处您已将“turn”添加到数组中,因此它会保留它。如果您拥有此对象的所有权,您现在可以释放它;如果您使用便捷方法创建它,它已经自动发布。

关于iphone - 内存管理怪癖!关于 NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7842690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com