I use an NSTask to collect system info from system_profiler. Because it takes a while to complete, I launch that task in a separate thread, to avoid UI from freezing.
Here is my code (I borrowed it from JRFeedbackProvider, http://github.com/rentzsch/jrfeedbackprovider/tree/master): - (void)gatherSystemInfo { [NSThread detachNewThreadSelector:@selector(systemProfilerThread:) toTarget:self withObject:nil]; } - (void)systemProfilerThread:(id)ignored { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *configuration = nil; NSPipe* inputPipe = [NSPipe pipe]; NSPipe* outputPipe = [NSPipe pipe]; NSTask* scriptTask = [[[NSTask alloc] init] autorelease]; [scriptTask setLaunchPath:@"/usr/sbin/system_profiler"]; [scriptTask setArguments:[NSArray arrayWithObjects:@"-detailLevel", @"mini", nil]]; [scriptTask setStandardOutput:outputPipe]; [scriptTask launch]; [[inputPipe fileHandleForWriting] closeFile]; configuration = [[[NSString alloc] initWithData:[[outputPipe fileHandleForReading] readDataToEndOfFile] encoding:NSUTF8StringEncoding] autorelease]; if (!m_isCanceled) { [m_target performSelectorOnMainThread:m_action withObject:configuration waitUntilDone:NO]; } [pool drain]; } The problem is, according to the Leaks tool, is that there's a memory leak in -systemProfilerThread. The leak disappears if I launch the task in the main thread. I've read in docs that NSTask is NOT thread safe, but does it also apply to the above case, when the NSTask object is created and released within a single thread, though not the main thread? If NSTask cannot be used this way, then which way I should use it? Also, what puzzles me is why, first and foremost, the main thread is blocked until the task is complete? I do not call wait -waitUntilExit. I would expect that the main thread is not blocked, but I receive the NSTaskDidTerminateNotification, but it does not happens with the code above. _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com