Hello again! In this seventh edition of the Hello World in Every Language series, we’re tackling Hello World in Objective-C.
Last time, I mentioned that we already covered the bulk of the languages I’m familiar with, so be prepared for me to enter some uncharted waters. I’ve never used Objective-C, so this should be interesting.
Table of Contents
- Objective-C Background
- Hello World in Objective-C
- How to Run the Solution
- Sample Programs in Every Language
Objective-C Background
In order to get familiar with Objective-C, I’ve leveraged Wikipedia as usual.
According to Wikipedia, Objective-C is another general-purpose language. In fact, it’s apparently quite similar to C, but it includes messaging akin to another language known as Smalltalk. Maybe we’ll create a Hello World article for that language as well.
Objective-C first appeared back in 1984 as the primary language for the NeXT and NeXTSTEP operating systems. From those operating systems came Apple’s OS X and iOS operating systems which both leveraged Objective-C.
Today, Objective-C is slowly being phased out by its successor, Swift. Or, at least that’s Apple’s goal. We’ll take a look at Swift in the next tutorial.
Hello World in Objective-C
So, it turns out that implementing Hello World in Objective-C is a bit complicated. As a result, I’ve decided to share a couple examples. Up first, the C-like example:
#import <Foundation/Foundation.h> int main() { NSLog(@"Hello, World!"); return 0; }
This should look very similar to our tutorial on Hello World in C, so I won’t bother going into it. However, I will note that the string style is a little different than we’re used to. We’ll notice an @ symbol just before the string. Apparently, that indicates to the compiler that we’re dealing with an NSString rather than a C string.
Anyway, let’s try an example which uses some of the more interesting features of Objective-C:
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog (@"Hello, World!"); [pool drain]; return 0; }
This example of Hello World in Objective-C is almost identical, but there are a couple new lines (5 & 7). Line 5 creates an NSAutoreleasepool which is effectively a scoping mechanism for objects. At line 7, all objects created within the scope of the pool are sent a release message. In a reference-counted environment, this decrements each objects reference counter which brings those objects one step closer to deletion.
The first example doesn’t actually require an NSAutoreleasepool. However, it’s an important feature to grasp when writing code in Objective-C.
How to Run the Solution
At any rate, we can try the code snippets above with this online Objective-C compiler. As a warning, I was unable to get the first example working without switching to GCC 5.3.0. You’ll get a lot of autorelease errors otherwise.
Alternatively, if you’re a Mac user, you can leverage Xcode. This same environment will allow you to code in Swift as well.
Sample Programs in Every Language
This tutorial on Hello World in Objective-C was actually quite a challenge for me. I’m unfamiliar with message passing which is fundamental to Objective-C. As a result, I had to do quite a bit of reading just to share these snippets above.
To follow-up Objective-C, we’re going to look into Apple’s upgrade called Swift. Hopefully, Swift will be easier to navigate. Objective-C has a lot of the ugly C syntax mixed with message passing. It’s definitely not the most readable language, but then again I’ve never been a fan of memory management.
Recent Posts
Python has a cool feature that allows you to overload the operators. Let's talk about what that means and how you might use it!
This week, we're hitting another beginner topic: the assignment operator. While the idea is simple, the concept is rich in related ideas like scope, iterable unpacking, and augmented assignment.