plausiblelabs / plblockimp

Experimental implementation of imp_implementationWithBlock()

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PLBlockIMP

PLBlockIMP provides an open-source implementation of imp_implementationWithBlock(), using vm_remap()-based trampolines as described in Implementing imp_implementationWithBlock.

PLBlockIMP will generate a lightweight, high-performance function pointer trampoline that may be used to register a block as an Objective-C method implementation. Mac OS X 10.6+ and iOS 4.0+ are supported.

Additionally, PLBlockIMP contains a generic trampoline allocator and set of generator scripts that may be used to implement custom trampoline pages on Mac OS X and iOS.

PLBlockIMP is released under the MIT license.

Sample Use

Use a block to add a new method to NSObject (based on Mike Ash's MABlockClosure example):

int captured = 42;
id block = ^(id self) { NSLog(@"captured is %d", captured); };
block = [block copy];
class_addMethod([NSObject class], @selector(my_printCaptured), pl_imp_implementationWithBlock(block), "v@:");

Additionally, pl_imp_getBlock() may be used to fetch the block associated with an IMP trampoline, and pl_imp_removeBlock() to discard a trampoline and its associated block reference.

About

Experimental implementation of imp_implementationWithBlock()

License:Other


Languages

Language:Objective-C 78.4%Language:C 15.2%Language:Shell 6.4%