2011-01-28 3 views

ответ

5

Ничего. Я нашел то, что я ищу на этих двух сайтах:

http://www.mikeash.com/pyblog/friday-qa-2009-08-14-practical-blocks.html, http://www.cocoabuilder.com/archive/cocoa/281058-sheets-blocks-and-garbage-collector.html

На самом деле, это код, и он полностью совместим с GC и не-GC:

@implementation NSApplication (SheetAdditions) 

- (void)beginSheet:(NSWindow *)sheet modalForWindow:(NSWindow *)docWindow didEndBlock:(void (^)(NSInteger returnCode))block 
{ 
    [self beginSheet:sheet 
    modalForWindow:docWindow 
    modalDelegate:self 
    didEndSelector:@selector(my_blockSheetDidEnd:returnCode:contextInfo:) 
     contextInfo:Block_copy(block)]; 
} 

- (void)my_blockSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo 
{ 
    void (^block)(NSInteger returnCode) = contextInfo; 
    block(returnCode); 
    Block_release(block); 
} 

@end