Search the FAQ Archives

3 - A - B - C - D - E - F - G - H - I - J - K - L - M
N - O - P - Q - R - S - T - U - V - W - X - Y - Z
faqs.org - Internet FAQ Archives

Objective-C FAQ


[ Usenet FAQs | Web FAQs | Documents | RFC Index | Cities ]
Archive-name: computer-lang/Objective-C/faq
Posting-Frequency: monthly

Path: cs.uu.nl!ruu.nl!tudelft.nl!txtfeed1.tudelft.nl!feeder.news-service.com!feeder2.cambrium.nl!feeder3.cambrium.nl!feeder5.cambrium.nl!feed.tweaknews.nl!68.142.88.75.MISMATCH!hwmnpeer01.ams!news.highwinds-media.com!kramikske.telenet-ops.be!nntp.telenet.be!kwabbernoot.telenet-ops.be!phobos.telenet-ops.be.POSTED!not-for-mail
From: stes@pandora.be
Newsgroups: comp.lang.objective-c,comp.answers,news.answers
Subject: Objective-C FAQ
Supersedes: <objcfaq_1190656802@news.pandora.be>
Followup-To: poster
Organization: David Stes
Lines: 440
Sender: stes@d51A5782A.access.telenet.be
Approved: news-answers-request@MIT.EDU
Expires: 25 Feb 2008 19:00:02 GMT
Message-ID: <objcfaq_1200164402@news.pandora.be>
Date: 2008年1月12日 18:54:42 GMT
NNTP-Posting-Host: 81.165.120.42
X-Complaints-To: abuse@telenet.be
X-Trace: phobos.telenet-ops.be 1200164082 81.165.120.42 (2008年1月12日 19:54:42 MET)
NNTP-Posting-Date: 2008年1月12日 19:54:42 MET
Xref: cs.uu.nl comp.lang.objective-c:27938 comp.answers:65554 news.answers:314504
See reader questions & answers on this topic! - Help others by sharing your knowledge
 Frequently Asked Questions - comp.lang.objective-c
 
 compiled by David Stes (stes@pandora.be)
 
 January 12 2008
 
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 #import ?
 + 3.4 Why am I lectured about using #import ?
 * 4. Object datatype (id)
 + 4.1 What is id ?
 + 4.2 What is the difference between self and super ?
 + 4.3 What is @defs() ?
 * 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. Portable 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 supports 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 #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
3.4 Why am I lectured about using #import ?
 The GNU Objective-C compiler emits a warning when you use #import
 because some people find using #import poor style. You can turn off
 the warning by using the -Wno-import option, you could modify the
 compiler source code and set the variable warn_import (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 @defs() ?
 It's a compiler directive to get access to the internal memory layout
 of instances of a particular class.
 
typedef struct { @defs(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 @selector :
 
[myObject perform:@selector(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:@selector(myMessage)];
myImp(myObject,@selector(myMessage));
 or
 
[myObject perform:@selector(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 subclasses, and those
 files that use @defs() or use direct access to the instance variables
 of that class. In short, using @defs() 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 = @"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. Portable 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 :
 
@implementation MyClass : Object { id ivar1; int ivar2; } : { id cvar1; }
@end
15.2 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
 _________________________________________________________________

User Contributions:

Comment about this article, ask questions, or add new information about this topic:


[ Usenet FAQs | Web FAQs | Documents | RFC Index ]

Send corrections/additions to the FAQ Maintainer:
stes@pandora.be





Last Update March 27 2014 @ 02:11 PM


AltStyle によって変換されたページ (->オリジナル) /