On 7 Mar 2014, at 6:54 AM, Bill Cheeseman <wjcheese...@gmail.com> wrote:
> My code calls -[NSArray objectAtIndex:]. I compile it with Xcode 5.0.2 on OS > X 10.9.x Mavericks in a project with the target's Base SDK set to 10.9 and > the OS X Deployment Target set to OS X 10.7. It works fine when I run it on > OS X 10.9 or OS X 10.8. > > However, when I run it on Mac OS X 10.7 Lion, I get a runtime error claiming > it encountered an invalid argument, namely, the unrecognized selector > -objectAtIndexedSubscript:. The NSArray Class Reference notes that > -objectAtIndexedSubscript: is available only in OS X 10.8 and later, and that > it is "identical to objectAtIndex:". Of course, -objectAtIndex: still exists > in the 10.9 API, and it is not marked as deprecated. > > It appears, therefore, that the compiler generated a call to > -objectAtIndexedSubscript: even though my source specifies -objectAtIndex: > and a deployment version of 10.7. I tried a Foundation command-line tool, 10.9 SDK, 10.7 deployment: int main(int argc, const char * argv[]) { @autoreleasepool { NSArray * myArray = @[ @"alpha", @"beta", @"gamma", @"delta" ]; NSString * zerothString = [myArray objectAtIndex: 0]; NSLog(@"The string is %@", zerothString); } return 0; } Note that I’m using an array literal, which is backwards-compatible, and you’d think that might tempt the compiler to emit objectAtIndexedSubscript:. My disassembly of main.o (Hopper Disassembler, UI a bit odd, but very valuable) shows no reference to objectAtIndexedSubscript:, so it’s not the compiler. There is a reference to _objc_msgSend_fixup, which you’d expect to be generic. The runtime _might_ special-case objectAtIndex: as an alias for objectAtIndexedSubscript:, but that’s a runtime issue, not compile-time. I saw nothing in the public source of the runtime, but I didn’t put much effort into it. And wasn’t the indexed-subscript notation supported in ObjC in late 10.7.x? And I seem to remember that objectAtIndexedSubscript: was implemented then (and retroactively supported as “public” API in 10.7 MAS submissions). I may be wrong about the chronology. See the Assembly assistant while your code is in the main editor. This is all bloviation on what Jens said: Check the backtrace. — F _______________________________________________ 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