非常简短的片段:
#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
,直到调用最后一个委托方法?
答案 0 :(得分:4)
documentation明确表示代理未被保留,这是Cocoa中的正常模式。此外,resolveWithTimeout:上的文档没有说明在调用委托方法之前保留的NSNetService。在正常的内存管理规则下(我认为这也适用于ARC),您不能对该方法范围之外的该对象的生命周期做出任何假设。
或者换句话说,通过不保持对象的强引用,你说“我对此不再感兴趣,如果你喜欢就废除它。”