iOS将对象保持在后台执行任务的范围内
<p><p>如何将一个对象保持在范围内,该对象在后台执行任务,该对象是从另一个对象的方法实例化的? </p>
<p>请参阅以下示例。对象 A 的 display 方法实例化对象 B 并调用它的 display 方法。当 B 对象的 display 方法启动一个异步任务时,控制返回到 A::display 方法,该方法返回,并且 bObject 被释放。在后台线程中访问 bObject 的数据/方法时,会抛出异常。 </p>
<p>维护对象 B 范围的最佳方法是什么?我可以将对象 B 声明为 A 的成员变量,但这会增加对象 A 整个生命周期的范围。</p>
<pre><code> @implementation A
-(void) display
{
B* bObject = [ init];
;
}
@end
@implementation B
-(void) display
{
dispatch_async((dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0),{
self.data = 5;
---------
});
@end
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>以前在 iOS 中你可以这样做,然后假设你创建的对象返回了一些委托(delegate)回调,你可以释放它。现在,您必须将“bObject”作为您的类的成员变量,并在完成后将其设置为 nil,或者等待 A 被销毁,这将使 bObject 超出范围。我假设这是使用 ARC,一旦“显示”完成,您的局部变量就会超出范围并因为 ARC 而被释放。</p>
<p>您可以将其添加到 A:</p>
<pre><code>@property (nonatomic, strong)B *bObject;
</code></pre></p>
<p style="font-size: 20px;">关于iOS将对象保持在后台执行任务的范围内,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/12269679/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/12269679/
</a>
</p>
页:
[1]