【问题标题】:stop PerformRequestsWithTarget during process, when low memory warning received在进程中停止 PerformRequestsWithTarget,当收到低内存警告时
【发布时间】:2013-03-06 13:29:27
【问题描述】:

ViewDidAppear

[self performSelectorInBackground:@selector(generatePdf) withObject:nil];

被调用。这会在视图加载后立即生成一个大 PDF。为了考虑内存不足的问题,我可以在启动后停止该进程吗?使用

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(generatePdf) object:nil];

不起作用,大概是因为视图一出现就已经调用了它。如果应用收到didReceiveMemoryWarning,我想停止这个过程,所以我正在寻找一个解决方案,可以在我的- (void)didReceiveMemoryWarning 方法中完全停止它

- (void)viewDidAppear:(BOOL)animated
{


 LogCmd();
[super viewDidAppear:animated];
if (self.pdfData == nil) {



    // Generate PDF

    [self performSelectorInBackground:@selector(generatePdf) withObject:nil];
   }
}

 ....some code


- (void)didReceiveMemoryWarning {



[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(generatePdf) object:nil];


}

【问题讨论】:

  • 你可以有一个变量并且可以改变它的值,根据这个值你可以从generatePdf方法返回。
  • 你的意思是做一个布尔/标志,检查它的值,如果运行取消执行选择器?我如何从generatePDF返回?
  • 不,我的意思是,如果您在 generatePdf 中执行某些任务,并且在此您可以检查 bool 值是否返回或继续处理 pdf
  • 好的,谢谢您的回复。不知道我明白了,我添加了更多代码

标签: ios objective-c cocoa-touch


【解决方案1】:

您不能停止正在运行的方法,但可以从中返回。

例如

- (BOOL)generatePdf{
    // some task

    if (memoryWarning){
        return NO;
    }

    // some Task

    if (memoryWarning){
        return NO;
    }

    //some Task

    if (memoryWarning){
        return NO;
    }

    //some Task

    //PDF has been successfully generated
    return YES;
}

【讨论】:

  • 好东西,有道理,谢谢你的帮助,加1
  • 嗯,并发问题。
  • @tc。是的,存在并发问题。 :)
猜你喜欢
  • 2016-01-22
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多