Our implementation currently does, but I don't think that's guaranteed, publicly documented (other than our libobjc being open-source), or something people should be relying on.
Jordan On May 30, 2014, at 11:06 , Argyrios Kyrtzidis <[email protected]> wrote: > I’m mainly asking if blocks are implicitly implementing the NSObject protocol > or not, for example this seems to work: > > typedef void(^blk)(void); > > int main() { > blk b = ^{}; > BOOL res = [b respondsToSelector:@selector(retain)]; > printf("res: %d\n", res); > return 0; > } > > >> On May 30, 2014, at 11:03 AM, Jordan Rose <[email protected]> wrote: >> >> I think I agree with Fariborz on this one. I don't remember us ever >> promising that blocks implement the NSObject protocol, just that they are >> valid Objective-C objects and that they implement -retain, -release, and >> -copy. The spec on the Clang site doesn't even promise -retain. >> (http://clang.llvm.org/docs/BlockLanguageSpec.html#objective-c-extensions) >> >> The developer can always cast if they really need this. >> >> Jordan >> >> >> On May 30, 2014, at 10:49 , jahanian <[email protected]> wrote: >> >>> It makes no sense to assign block to an object conforming to protocols. >>> Such objects must implement methods of those protocols which blocks cannot. >>> I explicitly ruled this out. Did you see this in an actual user code? >>> Curious to see how it is being used. >>> >>> - Fariborz >>> >>> On May 30, 2014, at 10:32 AM, Argyrios Kyrtzidis <[email protected]> >>> wrote: >>> >>>> This is giving an error in the following case, is this correct ? >>>> >>>> #import <Foundation/Foundation.h> >>>> >>>> typedef void(^blk)(void); >>>> >>>> void foo(blk b) { >>>> id<NSObject> x = b; // error: initializing 'id<NSObject>' with an >>>> expression of incompatible type 'blk' (aka 'void (^)(void)') >>>> } >>>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
