Разве Snow Leopard не представил какую-то альтернативу старому beginSheet: методу, который позволяет использовать блок для выполнения отделочных работ?Мне не нравится иметь его в другом методе обратного вызова.
Неважно.Я нашел то, что искал на этих двух сайтах:
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