我有一个名为ServiceBrowser
. 在这个类中,我有一个基于块的方法来搜索 NSNetServices。
我这样称呼该方法:
[_serviceBrowser discoverServicesOfType:@"_theService._tcp."
inDomain:@"local."
didDiscoverServices:^(NSArray *services) {
NSLog(@"Services discovered %@", services);
[UIView fadeView:_button toAlpha:1.0 duration:0.5 completion:nil];
} didRemoveServices:^(NSArray *services) {
NSLog(@"Services removed %@", services);
} failure:^(NSString *message) {
NSLog(@"Failure %@", message);
}];
如果我删除对它的调用,fadeView:toAlpha:duration:completion:
它会找到服务并将它们注销。仅当我在此块中使用 self 时,Xcode 才会崩溃,而控制台没有记录任何错误。
fadeView:toAlpha:duration:completion:
是 UIView 上的一个类别方法,它接受一个视图并将其淡入或淡出,这作为一个独立的方法工作得很好。问题是当我_button
在块内使用时它会崩溃。
我对此进行了调查,我认为这归结为保留周期。通过查看其他问题和博客文章,我应该在块内使用弱自我。
我已经尝试过使用__block id weakSelf = self;
并且也typeof(self) __weak w_self = self;
没有工作。