• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Stupid objective-c question
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Stupid objective-c question


  • Subject: Re: Stupid objective-c question
  • From: Slipp Douglas Thompson <email@hidden>
  • Date: Mon, 26 Sep 2016 20:17:57 -0500

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 <email@hidden> wrote:
>
>
>> On 24 Sep 2016, at 12:13 PM, Uli Kusterer <email@hidden> 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 (email@hidden)
>
> 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:
>
> This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden


  • Follow-Ups:
    • Re: Stupid objective-c question
      • From: Alastair Houghton <email@hidden>
    • Re: Stupid objective-c question
      • From: Britt Durbrow <email@hidden>
References: 
 >Stupid objective-c question (From: Gabriel Zachmann <email@hidden>)
 >Re: Stupid objective-c question (From: Graham Cox <email@hidden>)
 >Re: Stupid objective-c question (From: Uli Kusterer <email@hidden>)
 >Re: Stupid objective-c question (From: Graham Cox <email@hidden>)

  • Prev by Date: XCode documentation browser
  • Next by Date: Re: XCode documentation browser
  • Previous by thread: Re: Stupid objective-c question
  • Next by thread: Re: Stupid objective-c question
  • Index(es):
    • Date
    • Thread