相关疑难解决方法(0)

GCD在主线程中执行任务

我有一个可能来自任何线程的回调.当我得到这个回调,然后我想在主线程上执行某个任务.

我是否需要检查我是否已经在主线程上 - 或者是否因为没有执行此检查而遭受任何惩罚?请调用下面的代码?

dispatch_async(dispatch_get_main_queue(), ^{
   // do work here
});
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch

228
推荐指数
3
解决办法
11万
查看次数

检查当前线程是否是主线程

有没有办法检查当前线程是否是Objective-C中的主线程?

我想做这样的事情.

  - (void)someMethod
  {
    if (IS_THIS_MAIN_THREAD?) {
      NSLog(@"ok. this is main thread.");
    } else {
      NSLog(@"don't call this method from other thread!");
    }
  }
Run Code Online (Sandbox Code Playgroud)

iphone cocoa multithreading objective-c xamarin.ios

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

主队列上的dispatch_sync在单元测试中挂起

我在使用内置的Xcode单元测试框架SenTestingKit测试一些宏的中央调度代码时遇到了一些麻烦.我成功地解决了我的问题.我有一个单元测试,它构建一个块并尝试在主线程上执行它.但是,该块永远不会被实际执行,因此测试会挂起,因为它是同步调度.

- (void)testSample {

    dispatch_sync(dispatch_get_main_queue(), ^(void) {
        NSLog(@"on main thread!");
    });

    STFail(@"FAIL!");
}
Run Code Online (Sandbox Code Playgroud)

什么是导致它挂起的测试环境?

objective-c grand-central-dispatch sentestingkit

41
推荐指数
4
解决办法
2万
查看次数

iOS - 并发访问内存资源

我的应用程序从服务器,数据和数据描述符下载了几个资源.由用户操作触发的这些下载可以同时执行,例如,一次最多50次下载.所有这些异步任务最终都会在内存中创建对象(例如,将叶子附加到数据结构,例如向可变字典或对象添加键到数组).我的问题是:这会导致稳定性问题吗?例如,如果几个同时的任务尝试将键添加到同一个字典中,我是否应该处理这种情况,放置某种锁?如果我实现了一个在数组中查找图形元素的for循环,那么其他正在运行的任务是否可能在循环期间更改数组内容?关于除官方文档之外的多任务,多线程问题的任何参考或主要,一般方向?

xcode multithreading locking multitasking ios

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

AVAudioSession sharedInstance requestRecordPermission:^(BOOL已授予)

这是我的代码:

-(void) recordButton{

    [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
    NSLog(@"value of the grant is :: %hhd", granted);
    if (granted)
    {
          // perform operation recording
          // perfrom some operation on UI(changing labels and all)
    }
    else
    {
      // do operation
    }

   }];

}
Run Code Online (Sandbox Code Playgroud)

问题是,当我第一次运行我的应用程序时,在隐私中重置并且我的应用程序调用上面定义的方法后,会产生麻烦.

当我的应用程序第一次运行时,弹出允许/禁止麦克风乱码(操作系统定义)方法.当我点击允许它显示布尔值(授予correclty).正确进入IF内部.正确开始录制.但UI冻结了.并且IF的第二部分即改变标签名称,直到执行时才会执行计时器(由我添加停止方法和记录).

请帮忙.我可以感觉到我的第二部分IF(更改UI标签不在前台工作),即后台工作正常运行.请帮助,我不是专家.2个月前启动了iOS编程.

iphone objective-c avaudiorecorder

4
推荐指数
1
解决办法
2131
查看次数