0

非常短的片段:

#pragma mark - NSNetServiceBrowserDelegate

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

在这个例子- netServiceWillResolve:中是在同一个事件循环中调用的。然后,netService被释放(因为 ARC)和休息没有机会被调用。

我不喜欢 ivar 的解决方案。NSNetService *既不是阵列。netService在调用最后一个委托方法之前,是否有更好的“保留”方法?

4

1 回答 1

4

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

或者换一种说法,通过不保持对对象的强引用,您是在说“我不再对此感兴趣,如果您愿意,请取消它”。

于 2012-06-21T22:03:05.083 回答