On 12 Dec 2012, at 09:57, Andreas Grosam <agro...@onlinehome.de> wrote:
> > On 12.12.2012, at 10:19, Charles Srstka wrote: > >> On Dec 12, 2012, at 3:03 AM, Andreas Grosam <agro...@onlinehome.de> wrote: >> >>> How can I check at runtime whether an object (id) is actually a block, and >>> not another kind of object? >> >> I don't think there's any good way of doing that right now. You could check >> the class of the block, but since the block classes are completely >> undocumented AFAIK, there's no guarantee that the class names won't change >> in some future release of OS X and break your code. >> >> Charles >> > > Thanks for the reply. I feared that. > > Currently, I resort to > > > if ([obj isKindOfClass: NSClassFromString(@"NSBlock")]) > … > > which evaluates to YES if `obj` is a block. However, NSBlock is not a public > class, thus: NSClassFromString(@"NSBlock") which "works" as the time of > writing in Mac OS, and returns a class whose name is "NSBlock" (the real > block classes are named differently). > > I wish there was something official. > You could perhaps make this a little less fragile. typedef void (^MyBlockType)(void); // we know this is a block void (^isaBlock)(void) = ^(void) {}; MyBlockType aBlock = ^(void) {NSLog(@"I am a block");}; id qua = aBlock; if ([qua isKindOfClass:[isaBlock class]]) { ((MyBlockType)qua)(); } Jonathan _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com