Environment: OS X (10.6.5) & iOS4+... Scenario: I have a static object (myNumber) that I use to accumulate a value through multiple iterations from concurrent blocks.
Here's what I have learned: 1) Best way to 'share' variables is via heap vs stack. Hence, I've created a static object 'myNumber' that accumulates value. The following is the code: #import "ObjcBlocksViewController.h" @implementation ObjcBlocksViewController - (void)myPrintResults:(NSString *)desc { static NSNumber *myNumber = nil; if (myNumber == nil) { myNumber = [[NSNumber alloc] initWithInt:0]; } NSInteger myInteger = [myNumber integerValue]; myInteger += 5; myNumber = [NSNumber numberWithInteger:myInteger]; NSLog(@"{myPrintResults} %@ myNumber = %@", desc, myNumber); } - (IBAction)buttonAction:(id)sender { NSLog(@"{buttonAction} top"); dispatch_queue_t queue = dispatch_queue_create("com.mycompany.myButton", NULL); dispatch_async(queue, ^(void) { NSLog(@"----- {Outer-Block Operation} Top ----" ); [self myPrintResults:@"Main Loop"]; for (int k = 0; k < 10; k++) { dispatch_async(dispatch_get_main_queue(), ^(void) { [self myPrintResults:[NSString stringWithFormat:@"(%d)-Inner Loop-",k]]; }); } NSLog(@"----- {Outer-Block Operation} Bottom ----" ); }); dispatch_release(queue); NSLog(@"{buttonAction} bottom."); } // end buttonAction(). - (void)dealloc { [super dealloc]; } @end The output is expected: ...ObjcBlocks[1563:40b] {buttonAction} top ...ObjcBlocks[1563:40b] {buttonAction} bottom. ...ObjcBlocks[1563:1903] ----- {Outer-Block Operation} Top ---- ...ObjcBlocks[1563:1903] {myPrintResults} Main Loop myNumber = 5 ...ObjcBlocks[1563:40b] {myPrintResults} (0)-Inner Loop- myNumber = 10 ...ObjcBlocks[1563:40b] {myPrintResults} (1)-Inner Loop- myNumber = 15 ... ...ObjcBlocks[1563:40b] {myPrintResults} (9)-Inner Loop- myNumber = 55 ...ObjcBlocks[1563:1903] ----- {Outer-Block Operation} Bottom ---- Questions: 1) How do I properly release my static NSNumber *myNumber after use? It's static with a scope within an ObjC method so I can't release it in the dealloc(). 2) Is the @synchronized() directive required within myPrintResults() to protect from possible thread crashes? Regards, Ric. _______________________________________________ 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