Objective-C Language Multi-Threading Create more complex thread

Help us to keep this website almost Ad Free! It takes only 10 seconds of your time:
> Step 1: Go view our video on YouTube: EF Core Bulk Extensions
> Step 2: And Like the video. BONUS: You can also share it!


Using a subclass of NSThread allows implementation of more complex threads (for example, to allow passing more arguments or to encapsulate all related helper methods in one class). Additionally, the NSThread instance can be saved in a property or variable and can be queried about its current state (whether it's still running).

The NSThread class supports a method called cancel that can be called from any thread, which then sets the cancelled property to YES in a thread-safe way. The thread implementation can query (and/or observe) the cancelled property and exit its main method. This can be used to gracefully shut down a worker thread.

// Create a new NSThread subclass
@interface MyThread : NSThread

// Add properties for values that need to be passed from the caller to the new
// thread. Caller must not modify these once the thread is started to avoid
// threading issues (or the properties must be made thread-safe using locks).
@property NSInteger someProperty;


@implementation MyThread

- (void)main
    @autoreleasepool {
        // The main thread method goes here
        NSLog(@"New thread. Some property: %ld", (long)self.someProperty);


MyThread *thread = [[MyThread alloc] init];
thread.someProperty = 42;
[thread start];

Got any Objective-C Language Question?