<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>mikeash.com pyblog/friday-qa-2012-06-22-objective-c-literals.html comments</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>mikeash.com Recent Comments</description><lastBuildDate>Mon, 17 Aug 2026 10:50:15 GMT</lastBuildDate><generator>PyRSS2Gen-1.0.0</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>bob - 2014-10-28 23:32:00</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Addendum to my previous post: Comparison operators in C (but not C++), like &amp;lt;, &amp;gt;=, ==, etc. also all return an int. So:
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;NSLog(@"%@", @(42 == 17).class); // prints "__NSCFNumber"&lt;/code&gt;</description><guid isPermaLink="true">185e2a5799ca1977b4a2aee2149fc2c2</guid><pubDate>Tue, 28 Oct 2014 23:32:00 GMT</pubDate></item><item><title>bob - 2014-10-28 23:24:36</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>One thing to be careful about with boxed expressions is that the underlying "type" of the resulting NSNumber object depends on the compile-time type of the expression boxed, which may sometimes not be what you expect. In Objective-C:
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;
&lt;br /&gt;BOOL foo = NO;
&lt;br /&gt;NSLog(@"%@", @(foo).class); // prints "__NSCFBoolean"
&lt;br /&gt;NSLog(@"%@", @(!foo).class); // prints "__NSCFNumber"
&lt;br /&gt;NSLog(@"%@", @((BOOL)!foo).class); // prints "__NSCFBoolean"
&lt;br /&gt;&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;Although we normally think of the NOT ("!") of a BOOL to be a BOOL, in C, and hence Objective-C, the result of "!" always has type int. It works fine when we assign it to a BOOL or use it in a comparison, but boxed expressions care a lot about the actual compile-time type, and creates the NSNumber object differently depending on it.
&lt;br /&gt;
&lt;br /&gt;(Note that in C++, "!" returns type bool, so if you rename the file ".mm" to make it Objective-C++, then the above will all print "__NSCFBoolean". This change in behavior by just changing the language is also counterintuitive.)</description><guid isPermaLink="true">6f53f0cfac18d1ada1921dfe661a35b6</guid><pubDate>Tue, 28 Oct 2014 23:24:36 GMT</pubDate></item><item><title>Ashley Mills - 2014-02-26 14:35:26</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>I'd be curious to know if there's anyway to use the @{} dictionary initialiser to initialise another class. For example:
&lt;br /&gt;&lt;code&gt;
&lt;br /&gt;NSFetchRequest * fetchRequest = @{@"Entity" : @"SomeEntity", @"attributeName" : @"value"};
&lt;br /&gt;&lt;/code&gt;
&lt;br /&gt;which would be equivalent to:
&lt;br /&gt;&lt;code&gt;
&lt;br /&gt;NSFetchRequest * fetchRequest = [NSFetchRequest fetchRequestWithEntityName: @"Entity"];
&lt;br /&gt;fetchRequest.predicate = [NSPredicate predicateWithFormat: @"(%K == %@)", @"attributeName", @"value"];
&lt;br /&gt;&lt;/code&gt;
&lt;br /&gt;</description><guid isPermaLink="true">1f739078352dfd96612391fa845c0002</guid><pubDate>Wed, 26 Feb 2014 14:35:26 GMT</pubDate></item><item><title>Hoon H. - 2013-03-23 00:37:00</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>It's also possible to substitute literal classes with `@compatibility_alias`. 
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;
&lt;br /&gt;#import &amp;lt;Foundation/NSObject.h&amp;gt;
&lt;br /&gt;
&lt;br /&gt;@interface  AAA : NSObject
&lt;br /&gt;+ (id)numberWithInt:(int)num;
&lt;br /&gt;@end
&lt;br /&gt;
&lt;br /&gt;@implementation AAA
&lt;br /&gt;+ (id)numberWithInt:(int)num
&lt;br /&gt;{
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return  @"AAAAA!!!";    // Abused type system just to check result.
&lt;br /&gt;}
&lt;br /&gt;@end
&lt;br /&gt;
&lt;br /&gt;@compatibility_alias NSNumber AAA;
&lt;br /&gt;&lt;/code&gt;</description><guid isPermaLink="true">c2fecbf39c072068503e72cdd9fc545b</guid><pubDate>Sat, 23 Mar 2013 00:37:00 GMT</pubDate></item><item><title>Stuart Carnie - 2013-01-09 16:44:20</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>@mike,
&lt;br /&gt;
&lt;br /&gt;You are right, the vertical bars would pose a problem when parsing constant expressions.
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;NSSet *s = @(| @"test", @"one", @"two" |);&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;No whitespace for @(| and |) would make it more resilient…</description><guid isPermaLink="true">32cc4b1101d266e56d01ee18567666f0</guid><pubDate>Wed, 09 Jan 2013 16:44:20 GMT</pubDate></item><item><title>Dan - 2012-12-20 16:10:35</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>I'm so happy I found this.  Great post!</description><guid isPermaLink="true">ae9656b85e3e7c30e4764bec7784a37b</guid><pubDate>Thu, 20 Dec 2012 16:10:35 GMT</pubDate></item><item><title>rx - 2012-11-29 07:00:14</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Never mind, had the old gcc compiler set -- sorry!
&lt;br /&gt;</description><guid isPermaLink="true">7a2519e3841cf8a73a6f136824fd5b2e</guid><pubDate>Thu, 29 Nov 2012 07:00:14 GMT</pubDate></item><item><title>rx - 2012-11-29 06:53:58</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Hi, could anyone explain to me why this throws a compiler error ("Expected expression before @ token", haha, which one?)
&lt;br /&gt;&lt;code&gt;
&lt;br /&gt;NSArray *myArray = @[@{@"x1":@0,@"y1":@100,@"x2":@100,@"y2":@110}];
&lt;br /&gt;&lt;/code&gt;
&lt;br /&gt;Thanks and best regards, 
&lt;br /&gt;
&lt;br /&gt;rx</description><guid isPermaLink="true">ef8d296582056a7630d6f02b69802ec4</guid><pubDate>Thu, 29 Nov 2012 06:53:58 GMT</pubDate></item><item><title>alex gray - 2012-09-29 09:40:19</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>@Anonymous
&lt;br /&gt;
&lt;br /&gt;just throw the following in a header....
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;#define $(...) ((NSString *)[NSString stringWithFormat:__VA_ARGS__,nil])&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;and then use like
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;[$(@"whatever%ld %@", 2, obj  ) stringByRemoving......&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><guid isPermaLink="true">f5d5bb829b254f9859710a63ca5af59d</guid><pubDate>Sat, 29 Sep 2012 09:40:19 GMT</pubDate></item><item><title>Kat - 2012-07-27 22:39:02</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Xcode's auto-indentation has trouble with existing Objective-C code.  I'm a little disappointed, but not surprised, that it doesn't handle new literals so well yet.  :-(</description><guid isPermaLink="true">6c72234e503a79ce9a08f2001bf0c831</guid><pubDate>Fri, 27 Jul 2012 22:39:02 GMT</pubDate></item><item><title>Anonymous - 2012-07-25 19:18:56</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Also, Xcode's auto-indentation is pretty weird:
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.navigationBar.titleTextAttributes = @{
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UITextAttributeFont: [UIFont systemFontOfSize:12.0],
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UITextAttributeTextColor: [UIColor colorWithWhite:0.5 alpha:1.0],
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UITextAttributeTextShadowColor: [UIColor clearColor],
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};
&lt;br /&gt;&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;I would expect it at least to look like:
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.navigationBar.titleTextAttributes = @{
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UITextAttributeFont: [UIFont systemFontOfSize:12.0],
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UITextAttributeTextColor: [UIColor colorWithWhite:0.5 alpha:1.0],
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UITextAttributeTextShadowColor: [UIColor clearColor],
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};
&lt;br /&gt;&lt;/code&gt;</description><guid isPermaLink="true">07da68ce76d8b4d488381109e6fb0fa8</guid><pubDate>Wed, 25 Jul 2012 19:18:56 GMT</pubDate></item><item><title>Anonymous - 2012-07-25 19:13:09</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Very nice. I was hoping they would add some shortcut for &lt;code&gt;+stringWithFormat:&lt;/code&gt; too, like &lt;code&gt;@("foo %d", 1)&lt;/code&gt;. Oh well.</description><guid isPermaLink="true">cf1ca107cef459ea8d08c859a89c1757</guid><pubDate>Wed, 25 Jul 2012 19:13:09 GMT</pubDate></item><item><title>mikeash - 2012-07-09 14:21:26</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>How about some emoji syntax?
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;NSSet *vowels = @💩@"a, @"e", @"i", @"o", @"u"💩;&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;(That probably won't show up for everybody. In fact, it doesn't show up for me.)
&lt;br /&gt;
&lt;br /&gt;Regarding Stuart's syntax idea, I don't think it's workable. The problem is not the beginning, but the end, which results in ambiguity since | can be an operator or a set-end marker. For example:
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;NSSet *pathological = @| 0 | -1 | -2;&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;Of course, this is ultimately invalid code, but you can't know that until well after the actual parsing. There are probably ways to come up with an ambiguous case that is valid, but I don't quite have the energy to figure it out.</description><guid isPermaLink="true">15144026a86c526cdb47c277337998f6</guid><pubDate>Mon, 09 Jul 2012 14:21:26 GMT</pubDate></item><item><title>jamie - 2012-07-08 16:19:37</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>&lt;b&gt;Stuart:&lt;/b&gt;  I see.  Are you sure I can't interest you in a nice unicode character pair? Seems like just the job for the black lenticular brackets :)
&lt;br /&gt;
&lt;br /&gt;NSSet *vowels =  @【@"a","@"e",@"i",@"o",@"u"】;
&lt;br /&gt;</description><guid isPermaLink="true">12f36eeb58fcc1081cc90c3ae96b2687</guid><pubDate>Sun, 08 Jul 2012 16:19:37 GMT</pubDate></item><item><title>Stuart carnie - 2012-07-06 23:07:54</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>&lt;b&gt;jamie:&lt;/b&gt;  The Clang parser is a recursive descent parser, so this would work just fine as you have pretty fine-grained control.  When the parser hits an @ symbol in an expression, Clang calls the Parser::ParseObjCAtExpression (&lt;a href="https://github.com/llvm-mirror/clang/blob/4d3db4eb6caa49a7cdbfe1798728ce4b23cd0b53/lib/Parse/ParseObjc.cpp#L2019"&gt;https://github.com/llvm-mirror/clang/blob/4d3db4eb6caa49a7cdbfe1798728ce4b23cd0b53/lib/Parse/ParseObjc.cpp#L2019&lt;/a&gt;) you can simply add to the switch "if the next symbol following an @ is "|" start parsing an NSSet literal.
&lt;br /&gt;
&lt;br /&gt;Cheers</description><guid isPermaLink="true">6b81a8cb6d7467aaa9fb772964076187</guid><pubDate>Fri, 06 Jul 2012 23:07:54 GMT</pubDate></item><item><title>jamie - 2012-07-04 06:59:23</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>&lt;b&gt;Stuart:&lt;/b&gt; I dunno if that set syntax would work without significantly rewriting the Objective-C grammar, since the single bar is going to get eaten by the parser as part of the assignment-expression.  Looks like a job for a digraph.</description><guid isPermaLink="true">8b4d8ca8ccf8261ea33b35531ecd7809</guid><pubDate>Wed, 04 Jul 2012 06:59:23 GMT</pubDate></item><item><title>Stuart Carnie - 2012-06-25 05:56:23</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Good stuff, Mike.  Out of interest, I created a 3-part series in adding my own literal, NSURL to Clang.  &lt;a href="http://aussiebloke.blogspot.com/2012/06/llvm-clang-hacking-part-1.html"&gt;http://aussiebloke.blogspot.com/2012/06/llvm-clang-hacking-part-1.html&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;NSSet is interesting.  Would be easy to play with an experimental literal syntax for NSSet, like:
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;NSSet *theSet = @| @"one", @"two", @"three" |&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;</description><guid isPermaLink="true">5cc0a230bccdbedf30653b1d024c79af</guid><pubDate>Mon, 25 Jun 2012 05:56:23 GMT</pubDate></item><item><title>Jordan Rose - 2012-06-23 22:47:05</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>&lt;b&gt;Ken:&lt;/b&gt; Oops, yes, I take it back. I thought you could declare these to return any type you wanted, but it actually produces an error if it's not an Objective-C type. (You can pick something other than &lt;code&gt;id&lt;/code&gt;, though, just like any other covariant override.)
&lt;br /&gt;
&lt;br /&gt;(How embarrassing, considering I work on Clang!)</description><guid isPermaLink="true">64248c2276c3cd645dd3e40ddcad6306</guid><pubDate>Sat, 23 Jun 2012 22:47:05 GMT</pubDate></item><item><title>Ken Thomases - 2012-06-23 18:46:39</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>&lt;b&gt;Jordan:&lt;/b&gt; I suspect if you're using ARC and you make those methods return non-objects, you'll be burned quite badly.</description><guid isPermaLink="true">f21b5c3c010186869eff105db71a4254</guid><pubDate>Sat, 23 Jun 2012 18:46:39 GMT</pubDate></item><item><title>Jordan Rose - 2012-06-23 03:28:03</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>As a note, the return types of &lt;code&gt;-objectAtIndexedSubscript:&lt;/code&gt; and &lt;code&gt;-objectForKeyedSubcript:&lt;/code&gt; do &lt;i&gt;not&lt;/i&gt; have to be &lt;code&gt;id&lt;/code&gt;. There probably aren't that many times where this will actually come in handy, but it's there if you want it.</description><guid isPermaLink="true">27cb6d8f65147ed6db3c0160e7ff50f7</guid><pubDate>Sat, 23 Jun 2012 03:28:03 GMT</pubDate></item><item><title>Yuji Tachikawa - 2012-06-23 02:53:38</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Thank you very much for the nice article. It reminded me of a very similar syntax WebScript (a scripting version of Objective-C WebObjects once had) had, see Apple's documentation, &lt;a href="http://developer.apple.com/legacy/mac/library/documentation/LegacyTechnologies/WebObjects/WebObjects_3.1/DevGuide/WebScript/CreatingObjects.html#REF65852"&gt;http://developer.apple.com/legacy/mac/library/documentation/LegacyTechnologies/WebObjects/WebObjects_3.1/DevGuide/WebScript/CreatingObjects.html#REF65852&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;I never used WebScript or WebObjects to start with. I wonder how they were implemented. 
&lt;br /&gt;
&lt;br /&gt;By the way, WebScript also had a "modern"  function call/definition syntax, &lt;a href="http://developer.apple.com/legacy/mac/library/documentation/LegacyTechnologies/WebObjects/WebObjects_3.1/DevGuide/WebScript/ModernSyntax.html#REF54790"&gt;http://developer.apple.com/legacy/mac/library/documentation/LegacyTechnologies/WebObjects/WebObjects_3.1/DevGuide/WebScript/ModernSyntax.html#REF54790&lt;/a&gt; . 
&lt;br /&gt;</description><guid isPermaLink="true">fbcc389da4ce2890f8a12b6a1706ff04</guid><pubDate>Sat, 23 Jun 2012 02:53:38 GMT</pubDate></item><item><title>Cédric Luthi - 2012-06-22 22:11:55</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>The subscripting compatibility shim is actually part of &lt;code&gt;ARCLite&lt;/code&gt;. The &lt;code&gt;__ARCLite__load&lt;/code&gt; function (which oddly enough is called by the objc runtime as if it were a +load method) takes care of dynamically adding the four subscript methods with &lt;code&gt;class_addMethod&lt;/code&gt;. The implementations of these methods simply call the equivalent non-subscript methods. E.g. the &lt;code&gt;objectAtIndexedSubscript:&lt;/code&gt; method is implemented like this:
&lt;br /&gt;&lt;code&gt;
&lt;br /&gt;id __arclite_objectAtIndexedSubscript(NSArray *self, SEL _cmd, NSUInteger idx)
&lt;br /&gt;{
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return [self objectAtIndex:idx];
&lt;br /&gt;}
&lt;br /&gt;&lt;/code&gt;</description><guid isPermaLink="true">c4ce71c3d04c25f8f40c2b5c5e130a29</guid><pubDate>Fri, 22 Jun 2012 22:11:55 GMT</pubDate></item><item><title>mikeash - 2012-06-22 17:45:38</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>&lt;b&gt;Eimantas:&lt;/b&gt; It's not possible to create your own literal syntax without hacking on the compiler, or possibly using the new C++11 stuff in conjunction with Objective-C++.</description><guid isPermaLink="true">b3806329f2faff85d783b1121ee00c99</guid><pubDate>Fri, 22 Jun 2012 17:45:38 GMT</pubDate></item><item><title>Goffredo Marocchi - 2012-06-22 16:26:06</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Mike, your detailed article and Objective-C insights are a sight to behold. You do the language and Cocoa community a great service exploring "under the hood" topics. Thank you!
&lt;br /&gt;</description><guid isPermaLink="true">f9de026207a6e9732d16112606c5b635</guid><pubDate>Fri, 22 Jun 2012 16:26:06 GMT</pubDate></item><item><title>Eimantas - 2012-06-22 15:46:43</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>How about an article on how to create your own ObjC literal?</description><guid isPermaLink="true">9a0b657f393526ae7c841342114cf0b7</guid><pubDate>Fri, 22 Jun 2012 15:46:43 GMT</pubDate></item><item><title>mikeash - 2012-06-22 14:48:45</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>The compiler generates objects of class &lt;code&gt;__NSCFConstantString&lt;/code&gt; by default now, although that can be changed with a flag. But of course &lt;code&gt;NSConstantString&lt;/code&gt; still has to live forever, since older binaries reference it.</description><guid isPermaLink="true">9507fddba34a159ffac21fdbe7aecbab</guid><pubDate>Fri, 22 Jun 2012 14:48:45 GMT</pubDate></item><item><title>Remy "Psy" Demarest - 2012-06-22 14:36:25</title><link>http://www.mikeash.com/?page=pyblog/friday-qa-2012-06-22-objective-c-literals.html#comments</link><description>Are you sure NSConstantString is still used by the runtime for string literals?
&lt;br /&gt;
&lt;br /&gt;Also, the C++ initializers are ran after the ObjC runtime +load methods so if you're using NSArray it will probably be properly initialized when you're trying to make a literal. Don't you think?</description><guid isPermaLink="true">09c9e55c5bf72c747a7ee73d83f17c23</guid><pubDate>Fri, 22 Jun 2012 14:36:25 GMT</pubDate></item></channel></rss>
