
-(voID) scan { Scanner *scanner = [[Scanner alloc] init]; ID scanComplete = [[NSNotificationCenter defaultCenter] addobserverForname:@"ScanComplete" object:scanner queue:nil usingBlock:^(NSNotification *notification){ /* do something */ [[NSNotificationCenter defaultCenter] removeObserver:scanComplete]; [scanner release]; }]; [scanner startScan];} 更新:我从这个块接收间歇性EXC_BAD_ACCESS,所以这不能是正确的。
解决方法 在定义块本身之前声明scanComplete变量。你需要这样做的原因是因为你正在尝试访问一个在定义时块中不存在的变量,因为变量本身还没有被赋值。
是什么EXC_BAD_ACCESS?嗯,这是一个异常,当你尝试访问一个不存在的引用时抛出。所以这是你的例子中的情况。
所以如果你在块本身之前声明变量,那么它应该工作:
-(voID) scan { Scanner *scanner = [[Scanner alloc] init]; __block ID scanComplete; scanComplete = [[NSNotificationCenter defaultCenter] addobserverForname:@"ScanComplete" object:scanner queue:nil usingBlock:^(NSNotification *notification){ /* do something */ [[NSNotificationCenter defaultCenter] removeObserver:scanComplete]; [scanner release]; }]; [scanner startScan];} 总结 以上是内存溢出为你收集整理的ios – 正确管理addObserverForName:object:queue:usingBlock:全部内容,希望文章能够帮你解决ios – 正确管理addObserverForName:object:queue:usingBlock:所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)