2011-09-20 58 views
0

我有一个从网络接收数据的类,名为NetWorkConnect。以下方法在NetWorkConnect.m中,这是委托方法。 m_DisplayMarketViewController是类DisplayMarketViewController的一个实例。iphone网络多线程

-(void)stream:(NSStream*)stream handleEvent:(NSStreamEvent)eventCode{ 
    switch (eventCode) { 
     case NSStreamEventHasBytesAvailable: 
     { 
      if (data == nil) { 
      data = [[NSMutableData alloc] init]; 
      } 
      uint8_t buf[1024]; 
      unsigned int len = 0; 
      len = [(NSInputStream *)stream read:buf maxLength:1024]; 
      if(len) {  
      [data appendBytes:(const void *)buf length:len]; 
      } else { 
      NSLog(@"No data."); 
      } 
      [self storeData:data];    
      [m_DisplayMarketViewController updateMarket:self];     
    } break; 
    default: 
     break; 
    } 
} 

updateMarket经过自我DisplayMarketViewController,所以DisplayMarketViewController可以使用从network.and在DisplayMarketViewController.m文件时我更新数据的数据将被displayed.but接收的数据的方法中,我可以显示数据,但接口似乎有点阻塞,所以我打算使用多线程....但如何去做呢?谢谢。

回答

0
You can subclassing NSOperation and in implementation file you can try something like this. 

- (void)main 
{ 
    @try 
    { 
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

     executing_ = YES; 
     [self performSelector:@selector(makeSomethingInBackground:) onThread:[NSThread  currentThread] withObject:nil waitUntilDone:NO]; 
[pool drain]; 
    } 
    @catch (NSException * e) { 
     NSLog(@"Exception: %@", e); 
    } 
} 


#pragma mark - 
#pragma mark Overrides 

- (BOOL)isConcurrent 
{ 
    return YES; 
} 

- (BOOL)isExecuting 
{ 
    return executing_; 
} 

- (BOOL)isFinished 
{ 
    return finished_; 
} 

- (void)cancel 
{ 
    [super cancel]; 
    [self done]; 
} 
In another class create instance of your NSOperation subclass. 
YourNSOperationSubclass *operation = [YourNSOperationSubclass new]; 
NSOperationQueue *op = [NSOperationQueue new]; [op addOperation operation]; 
+0

首先,谢谢你。' - (无效)流:(NSStream *)流的handleEvent:(NSStreamEvent)EVENTCODE;'是委托方法,因此,它是与您的方法 “makeSomethingInBackground” 这个?方法会每秒调用一次,它是否也与您的方法相同? – Gaojian922188

+0

makeSomethingInBackground该方法将在单独的线程中运行,您可以使用“updateMarket”而不是“makeSomethingInBackground” – Andrey

+0

在这里查看一个示例,可以帮助您http://www.cimgf.com/2008/02/16/cocoa -tutorial-nsoperation-and-nsoperationqueue/ – Andrey