0

我正在使用 EADemo 示例开发蓝牙应用程序。只要蓝牙 inputStream 中有数据,就会调用以下事件:

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
    switch (eventCode) {
      case 1:
       //here I want to start two tasks
       break;

}

而且我有一个公共队列,我必须并行写入和读取。队列实际上是一个 NSMutuableArray。在写入部分,我使用addobject: ,在读取部分,我使用objectAtIndex:0

任何人都知道如何解决这个问题?

4

1 回答 1

0

当您使用相同的数组时,您需要确保访问安全,否则可能会使应用程序崩溃

方法 A:(使用 Grand Central Dispatch)

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);//set priority as per requirement

//读

dispatch_async(queue, ^{

                    while (//condition to stop)
                    {
                        //Perform read operation            
                    }
                });

//写

dispatch_async(queue, ^{

                    while (//condition to stop)
                    {
                        //Perform write operation           
                    }
                });

//由于操作在同一个队列上执行,您的数组被安​​全访问

方法 B:(使用线程)

创建两个线程

  1. 阅读主题

  2. 写胎面

但是以同步方式访问您的阵列。

于 2013-10-28T09:58:19.063 回答