What is #import?

It’s a C preprocessor construct to avoid multiple inclusions of the same file.

is an alternative to:

where the .h file is protected itself against multiple inclusions:

#ifndef _OBJECT_H_
#define _OBJECT_H_

What is id?

It’s a generic C type that Objective-C uses for an arbitrary object. For example, a static function that takes one object as argument and returns an object, could be declared as:

static id myfunction(id argument) { ... }

What is an IMP?

It’s the C type of a method implementation pointer, a function pointer to the function that implements an Objective-C method. It is defined to return id and takes two hidden arguments, self and _cmd:

typedef id (*IMP)(id self,SEL _cmd,...);

How do I get an IMP given a SEL?

This can be done by sending a methodFor: message:

IMP myImp = [myObject methodFor:mySel];

How can I link a C++ library into an Objective-C program?

You have two options: either use the Apple compiler or use the POC. The former accepts a mix of C++ and Objective-C syntax (called Objective-C++), the latter compiles Objective-C into C and then compiles the intermediate code with a C++ compiler.

How do I make a static method?

Methods are always implemented in Objective-C as static functions. The only way to obtain the IMP (implementation pointer) of a method is through the runtime (via methodFor: and friends) because the function itself is static to the file that implements the method.

How do I include X Intrinsics headers into an Objective-C file?

To avoid a conflict between Objective-C’s Object and the X11/Object, do the following:

#include <Object.h>
#define Object XtObject
#include <X11/Intrinsic.h>
#include <X11/IntrinsicP.h>
#undef Object

How do I allocate an object on the stack?

To allocate an instance of ‘MyClass’ on the stack:

MyClass aClass = [MyClass new];

What’s the class of a constant string?

It’s an NXConstantString.

NXConstantString *myString = @"my string";