gpt4 book ai didi

iphone - 使用 ARC 时释放对象

转载 作者:行者123 更新时间:2023-12-03 20:15:27 26 4
gpt4 key购买 nike

在测试我正在开发的应用程序时,我遇到了这个问题,我想讨论一下。我有一个类需要从服务器接收消息并需要将消息中继到 View 。我就是这样做的:

- (void) onMessage:(DFTopicMessage *) message {    
[[NSNotificationCenter defaultCenter]
postNotificationName:@"serverMessage"
object:message];
}

该类不会对该消息执行任何其他操作。当我使用 Instruments -> Leaks 进行分析时,这行代码被标记为潜在泄漏。我理解的问题是,消息被分配、使用但从未释放。第一个奇怪的事情是,我在项目中使用 ARC,因此期望操作系统自动释放 var,但显然情况并非如此(那么,为什么它不释放 var?)。无论如何,我开始思考如何避免这种泄漏。只需将 message 设置为 nil,例如:

- (void) onMessage:(DFTopicMessage *) message {    
[[NSNotificationCenter defaultCenter]
postNotificationName:@"serverMessage"
object:message];
message = nil;
}

无法防止泄漏。我找到了一个解决方案,将消息设置为 ivar 并使用如下访问器:

@interface myClass()
@property(nonatomic) DFTopicMessage *message;
@end

@implementation myClass {
@synthetize message;
....
- (void) onMessage:(DFTopicMessage *) msg {
[self setMessage:msg];

[[NSNotificationCenter defaultCenter]
postNotificationName:@"serverMessage"
object:[self message]];

}
}

现在,如果我使用以下方法进行分析,仪器 -> 泄漏将不再将其标记为潜在泄漏。我的问题是:这是使用 ARC 时强制释放 var 的唯一解决方案吗?

提前致谢!

最佳答案

当您分析项目时,它是否也将此方法标记为可能的泄漏?(我怀疑不是)。

您确定 Instruments 检测到的泄漏就是这个消息对象吗?如果是,看起来一定是误报,因为启用 ARC 后,这不应该泄漏。

关于iphone - 使用 ARC 时释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282731/

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