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 に答える