Why variable passed into block is not dealloced?
===

I have tested following code.

    // Employee.h

    @interface Employee : NSObject
    @property(nonatomatic, copy) void (^print)(void);
    @end

    // Employee.m

    @implementation Employee
    @synthesize print = _print;

    - (void)dealloc {
        [_print release];
        [super dealloc];
    }

    @end

    // main.m

    int main() {

        NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
        Employee* john = [[[Employee alloc] init] autorelease];
    
        john.print = ^{
            NSLog(@"block test %@", john);
        };
    
        [pool drain];
    }


In this case, variable "john"'s dealloc is not called.
But if I don't log john variable(Just like as NSLog(@"block test")), then it's dealloc is called.
What would be wrong?








