gpt4 book ai didi

objective-c - 使用 ARC 临时保留对象的最佳方法

转载 作者:行者123 更新时间:2023-11-28 19:17:49 24 4
gpt4 key购买 nike

非常短的片段:

#pragma mark - NSNetServiceBrowserDelegate

- (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing
{
netService.delegate = self;
[netService resolveWithTimeout:30];
}

在此示例中,- netServiceWillResolve: 在同一事件循环中被调用。然后,netService 被释放(因为 ARC)并且 rest 没有机会被调用。

我不喜欢 ivar 的解决方案。 NSNetService * 既不是数组。是否有更好的方法来“保留”netService 直到最后一个委托(delegate)方法被调用?

最佳答案

documentation明确表示不保留委托(delegate),这是 Cocoa 中的正常模式。还有关于 resolveWithTimeout: 的文档在调用委托(delegate)方法之前,没有说明 NSNetService 被保留。在正常的内存管理规则下(我认为这也适用于 ARC)你不能在该方法的范围之外对该对象的生命周期做出任何假设。

或者换句话说,通过不维护对该对象的强引用,你是在说“我对此不再感兴趣,如果你愿意,就把它去掉”。

关于objective-c - 使用 ARC 临时保留对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11146604/

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