我最近一直在接触 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:写下这个,我确实认为我应该继续并在每次消息调用结束时释放该对象,但既然我把它写出来了,我宁愿也得到你的意见。
感谢百万吨级的人们!
最佳答案
NSArray 处理自己的内存管理。将对象添加到数组后,它将保留该对象,直到将其从数组中删除为止。
[[matrix objectAtIndex:1] replaceObjectAtIndex:1 withObject:turn];
这里您已将“turn”添加到数组中,因此它将保留它。如果您拥有该对象的所有权,您现在可以释放它;如果您使用便捷方法创建它,它已经自动释放。
关于iphone - 内存管理怪癖!与 NSNumber 相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7842690/