Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Objective-c > Objective-C FAQ
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 1 Topic 909 of 1039
Post > Topic >>

Objective-C FAQ

by stes@[EMAIL PROTECTED] Sep 24, 2007 at 05:57 PM

Archive-name: computer-lang/Objective-C/faq
Posting-Frequency: monthly



             Frequently Asked Questions - comp.lang.objective-c
                                      
                  compiled by David Stes (stes@[EMAIL PROTECTED]
)
   
                                 September 24 2007
   
Contents

     * Contents
     * 1. About this FAQ
          + 1.1 Where can I find the latest version of the FAQ ?
     * 2. Objective-C Compiler Commands
          + 2.1 What's the file suffix for Objective-C source ?
          + 2.2 How do I compile .m files with the Stepstone compiler ?
          + 2.3 How do I compile .m files with the Apple compiler ?
          + 2.4 How do I compile .m files with the GNU C compiler ?
          + 2.5 How do I compile .m files with the POC ?
     * 3. Objective-C preprocessor issues
          + 3.1 What's the syntax for comments ?
          + 3.2 How do I include the root class ?
          + 3.3 What is #im****t ?
          + 3.4 Why am I lectured about using #im****t ?
     * 4. Object datatype (id)
          + 4.1 What is id ?
          + 4.2 What is the difference between self and super ?
          + 4.3 What is @[EMAIL PROTECTED]
() ?
     * 5. Message selectors (SEL)
          + 5.1 What is a SEL ?
          + 5.2 What is perform: doing ?
          + 5.3 How do I know the SEL of a given method ?
     * 6. Implementation pointers (IMP)
          + 6.1 What is an IMP ?
          + 6.2 How do I get an IMP given a SEL ?
          + 6.3 How do I send a message given an IMP ?
          + 6.4 How can I use IMP for methods returning double ?
          + 6.5 Can I use perform: for a message returning double ?
     * 7. Copying objects
          + 7.1 What's the difference between copy and deepCopy ?
     * 8. Objective-C and C++
          + 8.1 How can I link a C++ library into an Objective-C program
            ?
     * 9. Messages
          + 9.1 How do I make a static method ?
          + 9.2 How do I prevent an object from sending a given message ?
          + 9.3 Do I have to recompile everything if I change the
            implementation of a method ?
     * 10. Instance and Class Variables
          + 10.1 Do I have to recompile everything if I change instance
            variables of a class ?
     * 11. Objective-C and X-Windows
          + 11.1 How do I include X Intrinsics headers into an
            Objective-C file ?
     * 12. Stepstone Specific Questions
          + 12.1 How do I allocate an object on the stack ?
     * 13. GNU Objective-C Specific Questions
          + 13.1 Why do I get a 'floating point exception' ?
     * 14. Apple Objective-C Specific Questions
          + 14.1 What's the class of a constant string ?
          + 14.2 How can I link a C++ library into an Objective-C program
            ?
     * 15. ****table Object Compiler Objective-C Specific Questions
          + 15.1 What's the syntax for class variables ?
          + 15.2 How do I forward messages ?
          + 15.3 How can I link a C++ library into an Objective-C program
            ?
     * 16. Books and further reading
          + 16.1 Object-Oriented Programming : An Evolutionary Approach,
            2nd Ed.
          + 16.2 An Introduction To Object-Oriented Programming, 2nd Ed.
          + 16.3 Objective-C : Object-Oriented Programming Techniques
          + 16.4 Applications of Object-Oriented Programming; C++
            SmallTalk Actor Objective-C Object PASCAL
       
                               1. About this FAQ
                                       
1.1 Where can I find the latest version of the FAQ ?

   It's posted once a month to comp.lang.objective-c, comp.answers and
   news.answers. It is archived at
   ftp://rtfm.mit.edu/pub/faqs/computer-lang/Objective-C/faq.
   
                       2. Objective-C Compiler Commands
                                       
2.1 What's the file suffix for Objective-C source ?

   It's .m for implementation files, and .h for header files. Objective-C
   compilers usually also accept .c as a suffix, but compile those files
   in plain C mode.
   
2.2 How do I compile .m files with the Stepstone compiler ?

objcc -c class.m
objcc -o class class.o

2.3 How do I compile .m files with the Apple compiler ?

cc -c class.m
cc -o class class.o

   See http://www.apple.com
for more information.
   
2.4 How do I compile .m files with the GNU C compiler ?

gcc -c class.m
gcc -o class class.o -lobjc -lpthread

   See http://www.gnu.org
for more information.
   
2.5 How do I compile .m files with the POC ?

objc -c class.m
objc -o class class.o

   See http://metalab.unc.edu/pub/Linux/devel/lang/objc/
for more
   information.
   
                      3. Objective-C preprocessor issues
                                       
3.1 What's the syntax for comments ?

   The Objective-C preprocessor usually sup****ts two styles of comments :
   
// this is a BCPL-style comment (extends to end of line)

   and
   
/* this is a C-style comment */

3.2 How do I include the root class ?

   On Stepstone and the POC, the header file to include is :
   
<Object.h>

   On GNU cc and Apple cc, it's :
   
<objc/Object.h>

   The root class is located in a directory called runtime for the
   Stepstone compiler, and in a directory called objcrt for the POC, but
   because of implicit -I options passed on to the preprocessor, these
   locations are automatically searched.
   
3.3 What is #im****t ?

   It's a C preprocessor construct to avoid multiple inclusions of the
   same file.
   
#im****t <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

3.4 Why am I lectured about using #im****t ?

   The GNU Objective-C compiler emits a warning when you use #im****t
   because some people find using #im****t poor style. You can turn off
   the warning by using the -Wno-im****t option, you could modify the
   compiler source code and set the variable warn_im****t (in the file
   cccp.c) or you could convert your code to use pairs of #ifndef and
   #endif, as shown above, which makes your code work with all compilers.
   
                            4. Object datatype (id)
                                       
4.1 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) { ... }

4.2 What is the difference between self and super ?

   self is a variable that refers to the object that received a message
   in a method implementation. super refers to the same variable, but
   directs the compiler to use a method implementation from the
   superclass.
   
   Using pseudo-code, where copy (from super) is the syntax for the copy
   implementation of the superclass, the following are equivalent :
   
myObject = [super copy];

   and,
   
myObject = [self copy (from super)]; // pseudo-code

4.3 What is @[EMAIL PROTECTED]
() ?

   It's a compiler directive to get access to the internal memory layout
   of instances of a particular class.
   
typedef struct { @[EMAIL PROTECTED]
(MyClass) } *TMyClass;

   defines a C-type TMyClass with a memory layout that is the same as
   that of MyClass instances.
   
                          5. Message selectors (SEL)
                                       
5.1 What is a SEL ?

   It's the C type of a message selector; it's often defined as a
   (uniqued) string of characters (the name of the method, including
   colons), but not all compilers define the type as such.
   
5.2 What is perform: doing ?

   perform: is a message to send a message, identified by its message
   selector (SEL), to an object.
   
5.3 How do I know the SEL of a given method ?

   If the name of the method is known at compile time, use @[EMAIL PROTECTED]
 :
   
[myObject perform:@[EMAIL PROTECTED]
(close)];

   At runtime, you can lookup the selector by a runtime function that
   takes the name of the message as argument, as in :
   
SEL mySel = selUid(name); // for Stepstone
SEL mySel = sel_getUid(name); // for Apple
SEL mySel = sel_get_any_uid(name); // for GNU Objective C
SEL mySel = selUid(name); // for POC

                       6. Implementation pointers (IMP)
                                       
6.1 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,...);

6.2 How do I get an IMP given a SEL ?

   This can be done by sending a methodFor: message :
   
IMP myImp = [myObject methodFor:mySel];

6.3 How do I send a message given an IMP ?

   By dereferencing the function pointer. The following are all
   equivalent :
   
[myObject myMessage];

   or
   
IMP myImp = [myObject methodFor:@[EMAIL PROTECTED]
(myMessage)];
myImp(myObject,@[EMAIL PROTECTED]
(myMessage));

   or
   
[myObject perform:@[EMAIL PROTECTED]
(myMessage)];

6.4 How can I use IMP for methods returning double ?

   For methods that return a C type such as double instead of id, the IMP
   function pointer is casted from pointer to a function returning id to
   pointer to a function returning double :
   
double aDouble = ((double (*) (id,SEL))myImp)(self,_cmd);

6.5 Can I use perform: for a message returning double ?

   No. The method perform: is for sending messages returning id without
   any other argument. Use perform:with: if the message returns id and
   takes one argument. Use methodFor: for the general case of any number
   of arguments and any return type.
   
                              7. Copying objects
                                       
7.1 What's the difference between copy and deepCopy ?

   copy is intented to make a bytecopy of the object, sharing pointers
   with the original, and can be overridden to copy additional memory.
   deepCopy is intented to make a copy that doesn't share pointers with
   the original. A deep copy of an object contains copies of its instance
   variables, while a plain copy is normally just a copy at the first
   level.
   
                            8. Objective-C and C++
                                       
8.1 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. See the compiler
   specific questions for more information.
   
                                  9. Messages
                                       
9.1 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.
   
9.2 How do I prevent an object from sending a given message ?

   You can't. If your object responds to a message, any other class can
   send this message. You could add an extra argument sender and check,
   as in :
   
- mymethod:sender
{
  if ([sender isKindOf:..]) ...
}

   But this still requires cooperation of the sender, to use a correct
   argument :
   
  [anObject mymethod:self];

9.3 Do I have to recompile everything if I change the implementation of a
method ?

   No, you only have to recompile the implementation of the method
   itself. Files that only send that particular messages do not have to
   be recompiled because Objective-C has dynamic binding.
   
                       10. Instance and Class Variables
                                       
10.1 Do I have to recompile everything if I change instance variables of a
class ?

   You have to recompile that class, all of its subcl*****, and those
   files that use @[EMAIL PROTECTED]
() or use direct access to the instance variables
   of that class. In short, using @[EMAIL PROTECTED]
() to access instance variables,
   or accessing instance variables through subclassing, breaks the
   encapsulation that the Objective-C runtime normally provides for all
   other files (the files that you do not have to recompile).
   
                         11. Objective-C and X-Windows
                                       
11.1 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

                       12. Stepstone Specific Questions
                                       
12.1 How do I allocate an object on the stack ?

   To allocate an instance of 'MyClass' on the stack :
   
MyClass aClass = [MyClass new];

                    13. GNU Objective-C Specific Questions
                                       
13.1 Why do I get a 'floating point exception' ?

   This used to happen on some platforms and is described at
   ftp://ftp.ics.ele.tue.nl/pub/users/tiggr/objc/README.387. A solution
   was to add -lieee to the command line, so that an invalid floating
   point operation in the runtime did not send a signal. DJGPP users can
   consult http://www.delorie.com/djgpp/v2faq/.
AIX users may want to
   consult http://world.std.com/~gsk/oc-rs6000-problems.html.
In some
   cases, you can fix the problem by upgrading to a more recent version
   of the GNU Objective-C runtime and/or compiler.
   
                   14. Apple Objective-C Specific Questions
                                       
14.1 What's the class of a constant string ?

   It's an NXConstantString.
   
NXConstantString *myString = @[EMAIL PROTECTED]
"my string";

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

c++ -c file.m
c++ file.o -lcpluslib -o myprogram

          15. ****table Object Compiler Objective-C Specific Questions
                                       
15.1 What's the syntax for class variables ?

   List the class variables after the instance variables, and group them
   together in the same way as instance variables, as follows :
   
@[EMAIL PROTECTED]
 MyClass : Object { id ivar1; int ivar2; } : { id cvar1; }
@[EMAIL PROTECTED]
 How do I forward messages ?

   You have to implement doesNotUnderstand: to send a sentTo: message.
   
- doesNotUnderstand:aMsg
{
  return [aMsg sentTo:aProxy];
}

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

objc -c -cplus file.m
objc -cplus file.o -lcpluslib -o myprogram

                         16. Books and further reading
                                       
16.1 Object-Oriented Programming : An Evolutionary Approach, 2nd Ed.

   Brad Cox & Andy Novobilski, ISBN 0201548348.
   
16.2 An Introduction To Object-Oriented Programming, 2nd Ed.

   Timothy Budd, ISBN 0201824191
   
16.3 Objective-C : Object-Oriented Programming Techniques

   Pinson, Lewis J. / Wiener, Richard S., ISBN 0201508281
   
16.4 Applications of Object-Oriented Programming; C++ SmallTalk Actor
Objective-C Object PASCAL

   Pinson, Lewis J. / Wiener, Richard S., ISBN 0201503697
     _________________________________________________________________
 




 1 Posts in Topic:
Objective-C FAQ
stes@[EMAIL PROTECTED]   2007-09-24 17:57:40 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Fri Oct 10 19:56:49 CDT 2008.