Skip to content
Experimental implementation of imp_implementationWithBlock()
Objective-C C Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
Other Sources


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.

You can’t perform that action at this time.