2011-09-20 39 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