Q: – What is #import ?
It's a C preprocessor construct to avoid multiple inclusions of the same file.
#import <Object.h>
is an alternative to
#include <Object.h>
where the .h file is protected itself against multiple inclusions :
#ifndef _OBJECT_H_
…
#define _OBJECT_H_
#endif
Q: – 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) { … }
Q: – 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,…);
Q: – How do I get an IMP given a SEL ?
This can be done by sending a methodFor: message :
IMP myImp = [myObject methodFor:mySel];
Q: – 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.
Q: – 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.
Q: – 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
Q: – How do I allocate an object on the stack ?
To allocate an instance of 'MyClass' on the stack :
MyClass aClass = [MyClass new];
Q: – What's the class of a constant string ?
It's an NXConstantString.
NXConstantString *myString = @"my string";