首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MailCore并发支持

MailCore并发支持
EN

Stack Overflow用户
提问于 2012-11-17 01:34:13
回答 1查看 505关注 0票数 1

我正在使用(基于C库LibEtPan的) MailCore框架开发一个邮件客户端。我希望处理服务器连接和新线程或队列中的所有请求,并将信息推送到主队列以进行UI更新。

问题似乎是MailCore变量不能在线程间共享。

代码语言:javascript
复制
@implementation Controller
{
    NSOperationQueue *_queue;
    CTCoreAccount *_account;
    CTCoreFolder *_inbox;
    NSArray *_messages;
}

- (id)init
{
   // stuff

    _queue = [[NSOperationQueue alloc] init];
    
    [_queue addOperationWithBlock:^
     {
         _account = [[CTCoreAccount alloc] init];
         
         BOOL success = [_account connectToServer:@"imap.mail.com" port:993 connectionType:CTConnectionTypeTLS authType:CTImapAuthTypePlain login:@"me@mail.com" password:@"Password"];
         
         if (success)
         {
             CTCoreFolder *inbox = [_account folderWithPath:@"INBOX"];
             NSArray *messages = [inbox messagesFromSequenceNumber:1 to:0 withFetchAttributes:CTFetchAttrEnvelope];
             
             [[NSOperationQueue mainQueue] addOperationWithBlock:^
              {
                  _messages = [messages copy];
                  // UI updates here
              }];
         }
     }];

     // Other stuff
}

例如,稍后可以调用此方法:

代码语言:javascript
复制
- (void)foo
{
    [_queue addOperationWithBlock:^
     {
         CTCoreMessage *message = [_messages objectAtIndex:index];
         
         BOOL isHTML;
         NSString *body = [message bodyPreferringPlainText:&isHTML];
         
         [[NSOperationQueue mainQueue] addOperationWithBlock:^
          {
              // UI Updates
          }];
     }];
}

这里,body是空的,因为CTCore变量无法执行来自_queue的新请求。

根据这个comment,每个线程需要的是自己的CTCoreAccount,等等。iOS上的线程应该有共享内存。我不能确切地理解为什么即使在LibetPan库中使用了引用,跨线程重用相同的CTCoreAccount也不起作用。如何定义唯一的CTCoreAccount或CTCoreFolder“附加”到可以多次重用的不同线程或队列?

任何建议都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-25 19:49:53

MRonge here已经给出了答案。

一种方法是创建一个同时包含NSOperationQueue (带有maxConcurrentOperationCount=1)和CTCoreAccount的对象。该帐户的所有工作都通过该对象,并且一次只在一个线程上执行。然后,您可以为要访问的每个帐户选择这些对象之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13421602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档