I'm just going to throw this out there as a solution, not because I recommend this approach (it's API misuse after all) but because it would work.
Instead of using an `NSString *` you could use a `SEL` (AKA `struct objc_selector *`) since SELs are guaranteed to be unique for each given string they represent (within a process; AFAIR). So your code would become: if (context == @selector(mediaLibraryLoaded)) { // … Or in Swift: if context == Selector("mediaLibraryLoaded") { // … (Swift's `Selector.init(_ str:String)` implementation <https://github.com/apple/swift/blob/master/stdlib/public/SDK/ObjectiveC/ObjectiveC.swift#L98> just calls `sel_registerName` and (curiously) treats the returned pointer as a C-string.) Again, this is a blatant mis-use of the Objective-C API… but it is also a built-in compiler-optimized guaranteed-interned string, it won't cause issues when comparing to other arbitrary `void *`s, and the usage in Swift is almost identical to Objective-C. ---- My 2¢: I'm still in favor of making all usages of `context` in your app `NSObject *`s or `nil` because sometimes you do want to store an `NSDictionary *` or other data in `context` that's meant to be read later. But if you're stuck with using other libs that don't use `NSObject *`s or `nil`, or if you really want to ensure your code won't crash because its making assumptions about what's in the `context` your code registered, then I acknowledge your case. Key point: I personally wouldn't use the `SEL` approach, but still. — Slipp > On Sep 24, 2016, at 12:34 AM, Graham Cox <graham....@bigpond.com> wrote: > > >> On 24 Sep 2016, at 12:13 PM, Uli Kusterer <witness.of.teacht...@gmx.net> >> wrote: >> >>> I expect the first thing -isEqualToString: does is a pointer comparison, so >>> it’s unlikely to be significantly less performant for the case of when the >>> pointers are literally identical. >> >> No, Graham, don't do that! >> >> There is no guarantee that the context is a valid object. It is just >> supposed to be a unique pointer value so your class can tell a KVO >> notification from notifications for other observers on the same object (e.g. >> if a subclass observes the same value as a base class). > > > Yep, I’ve realised (from this discussion) that that’s an invalid assumption > of another kind. > > I’ve been revising code that does this as a result. > > Always something to learn :) > > —Graham > > > > _______________________________________________ > > 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/apple%2Bcocoa-dev%40slippyd.com > > This email sent to apple+cocoa-...@slippyd.com _______________________________________________ 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