Can I use a background thread to parse data?

后端 未结 4 1845
闹比i
闹比i 2021-01-07 10:35

I\'m using chcsvparser to parse data from a csv file on my apps launch. It\'s taking way too long to startup on main thread so I was thinking of doing this on the backgroun

相关标签:
4条回答
  • 2021-01-07 10:47

    You can always pass objects between threads.

    Use the following code to create a thread and pass the object to it.

    [NSThread detachNewThreadSelector:@selector(myThreadSelector:) toTarget:self withObject:myObject];
    

    After the thread function is over you can pass the data back to the main thread using

    [self performSelectorOnMainThread:@selector(myMainSelector:) withObject:myReturnObject waitUntilDone:NO];
    

    you can pass the output NSArray from the parser to myMainSelector: and reload the tableview in it.

    -(void)myMainSelector:(id)sender
    {
        NSArray *arr = sender;
        tableDataArray = [NSArray arrayWithArray:arr];
        [yourTableView reloadData];
    }
    

    You can show an activity indicator while you are in the thread method.

    0 讨论(0)
  • 2021-01-07 11:00

    ofcourse we can pass objects to thread... please go through the link which shows how to process heavy task in background...

    0 讨论(0)
  • 2021-01-07 11:13

    It is better to use NSOperation class to do that job. You can find a nice example named "LazyTableImages" at XCode documentation. It is uses a NSOperation to parse a XML

    0 讨论(0)
  • 2021-01-07 11:14

    The NSObject class has several different instance methods that allow you to invoke methods on the main UI thread. The performSelectorOnMainThread:withObject:waitUntilDone: method, for instance, allows you to invoke a method of the receiver on the main thread with the object of your choice.

    Here's some code to get you started:

    -(void) dataDoneLoading:(id) obj {
        NSMutableArray *array = (NSMutableArray *) obj;
        // update your UI
        NSLog(@"done");
    }
    
    -(void) myThread:(id) obj {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        NSMutableArray *array = [[[NSMutableArray alloc]init ]autorelease];
    
        // build up your array
    
        [self performSelectorOnMainThread:@selector(dataDoneLoading:) withObject:array waitUntilDone:NO];
    
        [pool release];    
    }
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
    
        [NSThread detachNewThreadSelector:@selector(myThread:) toTarget:self withObject:nil];    
    }
    
    0 讨论(0)
提交回复
热议问题