[ create a new paste ] login | about

Link: http://codepad.org/k57uJw2D    [ raw code | fork ]

C, pasted on May 12:
#import <Foundation/Foundation.h>

@interface ThreadingServer : NSObject
@property (atomic) BOOL isContinue;
@property (atomic) BOOL isRun;
@end
@implementation ThreadingServer
{
    dispatch_group_t group;
}
@synthesize isContinue;
@synthesize isRun;

- (id)init
{
    self = [super init];
    if (self)
    {
        NSLog(@"init");
        group = dispatch_group_create();
        self.isContinue = YES;
        dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
            self.isRun = YES;
            @autoreleasepool {
                while (self.isContinue) {
                    @autoreleasepool
                    {
                        NSLog(@"do something : %p", self);
                        [NSThread sleepForTimeInterval:1.0];
                    }
                    
                    @autoreleasepool { NSLog(@"%d", (int)CFGetRetainCount((__bridge void *)self)); }
                }
            }
            self.isRun = NO;
        });
        
        @autoreleasepool { NSLog(@"%d", (int)CFGetRetainCount((__bridge void *)self)); }
    }
    return self;
}
- (void)dealloc
{
    dispatch_release(group);
    NSLog(@"Exit ThreadingServer dealloc");
}
@end

@interface ThreadingServerForOutsideClass : NSObject
@end

@interface ThreadingServerForOutsideClass ()
@property (strong,nonatomic) ThreadingServer *server;
@end

@implementation ThreadingServerForOutsideClass
@synthesize server = _server;

- (id)init
{
    if( (self = [super init]) == nil )
        return nil;

    self.server = [[ThreadingServer alloc] init];

    return self;
}

- (void)dealloc
{
    _server.isContinue = NO;
    self.server = nil;
    NSLog( @"Exit ThreadingServerForOutsideClass dealloc" );
}
@end

int main(int argc, const char * argv[])
{
    
    @autoreleasepool
    {
        ThreadingServerForOutsideClass *server = [[ThreadingServerForOutsideClass alloc] init];
        
        [NSThread sleepForTimeInterval:3.0];
    }
    [NSThread sleepForTimeInterval:8.0];
    return 0;
}


Create a new paste based on this one


Comments: