iphone - 内存管理怪癖!与 NSNumber 相关

标签 iphone objective-c ios xcode

我最近一直在接触 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/

相关文章:

iphone - 实现为本地存储的视频中的每一帧触发的委托(delegate)

objective-c - 如何在午夜获取今天的 NSDate 对象?

objective-c - 自定义 NSView 更改背景颜色时崩溃

ios - 使用 getdatainbackground 从 Parse 检索多个图像(IOS - Swift)

iphone - 使用 Phonegap 安装 iTunes 同步应用程序失败

iphone - 无论方向如何,如何在 UITableViewCell 中将 UIImageView 居中?

iphone - 请求访问联系人的权限

objective-c - 如何使用 ARC 优化 Objective-C 单例?

ios - 在 Objective-C 中发布带有两个端点的绘图线

iOS UITableView cellForRowAtIndexPath 不调用