NSNotifications name best practice NSNotifications name best practice objective-c objective-c

NSNotifications name best practice


As for using constant strings in your project, there’s another question on Stack Overflow about that: Constants in Objective C.

As for naming notifications, Coding Guidelines for Cocoa suggests the following:

Notifications are identified by global NSString objects whose names are composed in this way:

[Name of associated class] + [Did | Will] + [UniquePartOfName] + Notification


This doesn't follow the Apple-suggested format exactly, nor does it directly answer your question, but I thought I'd share these handy-dandy text macros that I use to spare myself a little typing when making notification and key names. You can assign these a keyboard shortcut, type in and select the [Did|Will] + [UniquePartOfName] segment, then hit the shortcut to produce the variable and its value. You could also use $(FILENAMEASIDENTIFIER) instead of $(PROJECTNAME) if you were defining these strings in the header of a particular class, and that would conform to the suggestion.

//MARK: Notification strings    { /*       * Use the selection to make the name and string for a Notification.       * The string has a prefix placeholder, defaulting to the project name.       */      Identifier = objc.notestring;      BasedOn = objc;      IsMenuItem = YES;      Name = "Notification Name From Selection";      TextString = "<#$(PROJECTNAME)#><#!notename!#>Notification = @\"<#$(PROJECTNAME)#><#!notename!#>Notification\";";      CompletionPrefix = notestring;    },    { /*       * Insert placeholders to make the name and string for a Notification.       * This is for use without a selection, and so "only" activates at the        * beginning of the line.       */      Identifier = objc.notestring.bol;      BasedOn = objc.notestring;      IsMenuItem = YES;      Name = "Notification Name From Selection";      OnlyAtBOL = YES;      CompletionPrefix = notestring;    },//MARK: Default Key strings    { /*       * Convert the selection into a name and string for use in the User        * Defaults system. The string has a placeholder for a prefix, which       * defaults to the project name.       */      Identifier = objc.defaultskeystring;      BasedOn = objc;      IsMenuItem = YES;      Name = "UserDefaults Key From Selection";      OnlyAtBOL = NO;      TextString = "<#$(PROJECTNAME)#><#!keyname!#>Key = @\"<#$(PROJECTNAME)#><#!keyname!#>Key\";";      CompletionPrefix = defaultskey;    },    { /*       * Insert placeholders to make the name and string for a a key for the       * User Defaults system. This is for use without a selection, and so        * "only" activates at the beginning of the line.       */      Identifier = objc.defaultskeystring.bol;      BasedOn = objc.defaultskeystring;      IsMenuItem = YES;      OnlyAtBOL = YES;      Name = "UserDefaults Key From Selection";      CompletionPrefix = defaultskey;    },

These are Xcode 3 macros. I know the macro system is different in Xcode 4 (which I'm not using yet), but I believe the conversion is simple and can be automated.