On Sep 27, 2015, at 7:51 PM, Scott Ribe <scott_r...@elevated-dev.com> wrote: > > On Sep 27, 2015, at 7:03 PM, Quincey Morris > <quinceymor...@rivergatesoftware.com> wrote: >> >> IIRC you can simply assign ‘self’ to a local variable just before assigning >> to ‘fun', and use the local variable name instead of ‘self’ inside the block. > > Well, that does work. Thanks!
So, a follow-up. Indeed assigning to a local var & then using it does work. Because although it creates the same retain cycle which must be broken the same way, the compiler does not catch it, and I'd be right back where I was before ARC--everything working OK. And you can also assign to a weak local var & then use that, not create a retain cycle, and not have to break it anymore. And you can wrap that in a macro something like: #define WeakRef(s) __weak __typeof__(s) s##_weak = s But ultimately, I didn't really like doing things this way, nor with any type of dummy local var to fool the compiler: WeakRef(self); self.authfun = ^void () {[self_weak ...];}; The essential problem was in the library design, not the calls. I was keeping self.authfun as an instance var for the sole purpose of unregistering the callback when the owner (a window controller) was being torn down. The better way (IMO) was to change the basic call from: void RegisterAuthenticationCallback(void (^)()) void UnregisterAuthenticationCallback(void (^)()) to: void RegisterAuthenticationCallback(id, void (^)()) void UnregisterAuthenticationCallbacks(id) // note slight change in semantics, cannot unregister a single cbk So now the callback is keyed on the owner, a simple change in the underlying class, but we're back to clients just have to register & unregister without any temp vars nor cycle-breaking. -- Scott Ribe scott_r...@elevated-dev.com http://www.elevated-dev.com/ https://www.linkedin.com/in/scottribe/ (303) 722-0567 voice _______________________________________________ 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