标签: dispatch-async

坠毁:com.apple.root.default-qos

我有一个相当简单的应用程序,它解析RSS提要并在表格视图中显示它的内容.它可以在App Store上找到.我整合了Crashlytics崩溃报告.我最近收到两份报告.这些有点难以破译.

这发生在运行iOS 10.2.1的iPhone 6中.

在此输入图像描述

这是来自运行iOS 10.2.1的iPhone 5.

在此输入图像描述

虽然它说它因隐私侵犯而崩溃,但我没有访问任何需要我的应用程序权限的服务.

另外搜索com.apple.root.default-qos让我相信这可能与后台线程有关.我使用后台线程的唯一地方是解析RSS提要数据.

DispatchQueue.global(qos: .background).async {

    guard let data = try? Data(contentsOf: URL) else {
        return
    }

    do {
        let xmlDoc = try AEXMLDocument(xml: data)

        if let items = xmlDoc.root["channel"]["item"].all {
            self.posts.removeAll()

            for item in items {
                let title = item["title"].value ?? ""
                // ...
                self.posts.append(jobPost)
            }

            DispatchQueue.main.async {
                self.saveposts(self.posts)
                self.posts.sort { $0.publishDate > $1.publishDate }
                self.tableView.reloadData()
                UIApplication.shared.toggleNetworkActivityIndicator(show: false)
                self.toggleUI(enable: true)
                if self.refreshControl.isRefreshing { self.refreshControl.endRefreshing() }
            }

        }

    } catch let …
Run Code Online (Sandbox Code Playgroud)

multithreading grand-central-dispatch ios dispatch-async swift

11
推荐指数
1
解决办法
5698
查看次数

如何将(OS_dispatch_data*)5018112字节转换为NSData以放入UIImage

我一直在寻找一个答案,有些人似乎可能是我需要的,但我不确定.我发现了这个问题#9152851和这个问题#2617625并在一堆链接上探讨了但我需要一些方向.

本质上,我正在调度异步调用以使用OpenCV处理图像.您可以通过此处的代码看到我将其转换为NSData*,然后再将其发送回我的代理人.

NSData *proccessedData = [NSData dataWithBytes:processedImage.data length:(processedImage.rows * processedImage.cols)];        
[self.delegate onProcessedBitmapReady:proccessedData withFocusQuality:focusQuality];
Run Code Online (Sandbox Code Playgroud)

但是当我回到我的委托时,我的processedBitmap是类型(OS_dispatch_data*)并包含一个字节值.所以,当我尝试设置UIImage时,它被设置为null.

- (void)onProcessedBitmapReady:(NSData *)processedBitmap withFocusQuality:(double)focusQuality
{
    //Use comverted image from self.captureCommand onComplete
    UIImage *image = [[UIImage alloc] initWithData:processedBitmap];
    [self saveImage:image];
}
Run Code Online (Sandbox Code Playgroud)

以下是值的屏幕截图:

Imgur

那么,我如何将这些字节(或者它们是什么)转换成我可以填充到UIImage中的东西呢?

预先感谢您的帮助.

-------------------------------------------------- ----- 添加新图像 -----------------------------------------

我的字节

这个新图片有帮助吗?

谢谢.

opencv objective-c uiimage dispatch-async

10
推荐指数
1
解决办法
8172
查看次数

dispatch_async vs dispatch_sync执行顺序

我有一个创建的串行调度队列:

dispatch_queue_t serialQueue = dispatch_queue_create("com.unique.name.queue", DISPATCH_QUEUE_SERIAL);
Run Code Online (Sandbox Code Playgroud)

我想使用这个串行队列来确保类访问的线程安全性,同时自动异步工作,不需要返回调用线程.

- (void)addObjectToQueue:(id)object
{
    dispatch_async(serialQueue, ^{
        // process object and add to queue
    }); 
}

- (BOOL)isObjectInQueue:(id)object
{
    __block BOOL returnValue = NO;
    dispatch_sync(serialQueue, ^{
        // work out return value
    });
    return returnValue;
} 
Run Code Online (Sandbox Code Playgroud)

如果我调用addObjectToQueue:方法,然后立即调用isObjectInQueue:方法,它们是否保证以相同的顺序执行,或者is/In将首先执行isObjectInQueue?

换句话说,dispatch_async执行与dispatch_sync完全相同(立即调度块),除了它不阻塞调用线程?

我已经看到类似的问题,答案是双向的,所以我正在寻找一个明确的答案,最好用Apple文档支持.

concurrency sync objective-c grand-central-dispatch dispatch-async

9
推荐指数
1
解决办法
6886
查看次数

GCD dispatch_async内存泄漏?

以下代码将占用~410MB的内存,不会再次释放.(使用的版本dispatch_sync代替dispatch_async将需要~8MB内存)
我预计会有高内存使用率的飙升,但它应该再次下降......泄漏在哪里?

int main(int argc, const char * argv[]) {
  @autoreleasepool {
    for (int i = 0; i < 100000; i++) {
      dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{
        NSLog(@"test");
      });
    }
    NSLog(@"Waiting.");
    [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:60]];
  }
  return 0;
}  
Run Code Online (Sandbox Code Playgroud)

我试过了:

  • 在循环内部和内部添加@autoreleasepool
  • 添加NSRunLoop run循环

我尝试了几种组合,从未看到内存减少(即使在等待几分钟后).我知道GCD参考指南,其中包含以下声明:

尽管GCD调度队列具有自己的自动释放池,但它们无法保证这些池何时耗尽.

这段代码中是否有内存泄漏?如果没有,有没有办法强制队列释放/排出已完成的块?

memory-leaks libdispatch grand-central-dispatch dispatch-async

9
推荐指数
1
解决办法
1850
查看次数

什么可以在iOS9.1中的dispatch_async上触发SIGABRT?

我正在尝试调试我的许多用户在该领域报告的崩溃错误.所有都显示我相同的堆栈:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  8
OS Version:          iOS 9.1 (13B143)
Code Type:           ARM (Native)

0   libsystem_kernel.dylib          0x392ccc84 0x392b8000 + 85124
1   libsystem_pthread.dylib         0x39370732 0x3936c000 + 18226
2   libsystem_c.dylib               0x39264f9a 0x3921a000 + 307098
3   libsystem_c.dylib               0x39264f2c 0x3921a000 + 306988
4   libsystem_c.dylib               0x392447ea 0x3921a000 + 174058
5   MyApp                           0x000cb3e0 __69-[MyDataManager myMethod:]_block_invoke (MyDataManager.m:2367)
Run Code Online (Sandbox Code Playgroud)

2367行简单地说:

2363: BOOL success = [db executeUpdate:@"INSERT INTO table (id, content) VALUES (?, ?)", message.remoteId, message.content];
2364: assert(success);
2365: …
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch sigabrt ios dispatch-async

7
推荐指数
1
解决办法
830
查看次数

锁屏iOS 9打破了我的异步功能

当按下主页按钮时,我的应用程序变为非活动状态,然后转到后台,但我的功能仍在执行:

        let qualityOfServiceClass = QOS_CLASS_BACKGROUND
        let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
        dispatch_async(backgroundQueue, {
            // SOME LONG CODE (parse a NSXMLParse)
            })
        })
Run Code Online (Sandbox Code Playgroud)

但是当我按下Home按钮时出现错误并且我的功能"中断"(未完成,只是删除):

DATE应用程序的名称[498:53974]** - [UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:]**unhandled action - > {handler = remote; info = {(1)= 5; }; }

所以我测试了这样的东西:首先,按下主页按钮,然后按下锁定按钮.这样我就不会得到错误,一切都好.

当我的应用程序处于活动状态时按下锁定按钮时,我只有这个错误,并且在应用程序变为非活动状态和背景之前发生此错误

我正在使用iOS 9和Xcode 7 beta 5,swift 2

background-process dispatch-async ios9 swift2

6
推荐指数
0
解决办法
848
查看次数

NSRunLoop runMode并不总是处理dispatch_async

我试图更好地了解队列及其工作原理。这个片段是为了测试他们的行为:

- (void)dispatchQueueTest
{
    NSLog( @"Begin test on %@ thread", [NSThread isMainThread] ? @"main" : @"other" );
    dispatch_semaphore_t s = dispatch_semaphore_create(0);

    dispatch_async( dispatch_get_main_queue(), ^{
        NSLog( @"Signalling semaphore" );
        dispatch_semaphore_signal(s);
    });

    NSLog( @"Waiting for worker" );
    while( dispatch_semaphore_wait( s, DISPATCH_TIME_NOW ) ) {
        NSDate* timeout = [NSDate dateWithTimeIntervalSinceNow:10.f];
        // Process events on the run loop
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:timeout];
    }
    dispatch_release(s);
    NSLog( @"All sync'd up" );
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,它会在日志中生成以下内容:

Begin test on main thread
Waiting for worker
Signalling semaphore
All sync'd up …
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch nsrunloop dispatch-async

5
推荐指数
1
解决办法
1413
查看次数

swift:异步任务+完成

我对swift中的异步任务感到非常困惑.我想做的是这样的......

 func buttonPressed(button: UIButton) {
   // display an "animation" tell the user that it is calculating (do not want to freeze the screen
   // do some calculations (take very long time) at the background
   // the calculations result are needed to update the UI
 }
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

func buttonPressed(button: UIButton) {
    let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
    dispatch_async(queue) { () -> Void in
       // display the animation of "updating"
       // do the math here
        dispatch_async(dispatch_get_main_queue(), {
          // update the UI
       }
    } …
Run Code Online (Sandbox Code Playgroud)

ios dispatch-async swift swift2

5
推荐指数
1
解决办法
5454
查看次数

DispatchQueue在Swift中与main.sync崩溃

请向我解释为什么我会遇到这次崩溃?

线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)

在这

DispatchQueue.main.sync {print("sync")}

这是我的代码.

    override func viewDidLoad() {
    super.viewDidLoad()


    print("Start")
    DispatchQueue.main.async {
        print("async")

    }
    DispatchQueue.main.sync {
        print("sync")
    }
    print("Finish")
}
Run Code Online (Sandbox Code Playgroud)

event-dispatch-thread ios dispatch-async swift

5
推荐指数
3
解决办法
5642
查看次数

如何以正确的顺序从 Redux 中间件分派操作

与世界上的应用程序一样,我的 React 应用程序需要对 API 执行一些 Ajax 调用。

我选择使用 Redux 中间件,以便正确地将 API 获取与我的组件分开。
这个想法是从我的组件中分派REQUEST操作。中间件监听它们并调度SUCCESSERROR操作:最后这些由减速器监听。

这里很多人已经问过如何从 Redux 中间件分派操作:这不是的问题的主题:)

首先,让我向您展示我用来编写的一个简单的减速器:

function currentUserReduxer(state = {}, action = {}) {
  const { currentUser, error } = action.payload;

  switch (action.type) {
    case 'GET_CURRENT_USER_REQUEST':
      return { ...state, isFetching: true, error: null };

    case 'GET_CURRENT_USER_SUCCESS':
      return { ...state, id: currentUser.id, isFetching: false };

    case 'GET_CURRENT_USER_FAILURE':
      return { ...state, isFetching: false, error };

    default:
      return state;
  }
}
Run Code Online (Sandbox Code Playgroud)

以及相应的中间件:

() => …
Run Code Online (Sandbox Code Playgroud)

javascript dispatch-async redux redux-middleware

5
推荐指数
1
解决办法
1万
查看次数