mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-31 00:30:53 +00:00
Lots of documentation added.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@13748 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
f90845f2b6
commit
87a1583a59
5 changed files with 284 additions and 43 deletions
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
* Source/NSObject.m: Change NSDecrementExtraRefCountWasZero() to
|
* Source/NSObject.m: Change NSDecrementExtraRefCountWasZero() to
|
||||||
refrain from decrementing when the count is zero. Documented
|
refrain from decrementing when the count is zero. Documented
|
||||||
the retain/release/retainCopunt methods.
|
the retain/release/retainCount methods (and others).
|
||||||
* headers/Foundation/NSObject.h: Documented extra ref count functions.
|
* Headers/Foundation/NSObject.h: Documented extra ref count functions.
|
||||||
|
|
||||||
2002-05-28 Richard Frith-Macdonald <rfm@gnu.org>
|
2002-05-28 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
/* Interface for MIME parsing classes
|
/** Interface for MIME parsing classes
|
||||||
|
|
||||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
|
|
@ -103,57 +103,91 @@
|
||||||
+ (void) initialize;
|
+ (void) initialize;
|
||||||
+ (id) allocWithZone: (NSZone*)z;
|
+ (id) allocWithZone: (NSZone*)z;
|
||||||
+ (id) alloc;
|
+ (id) alloc;
|
||||||
+ (id) new;
|
|
||||||
- (id) copy;
|
|
||||||
- (void) dealloc;
|
|
||||||
- (id) init;
|
|
||||||
- (id) mutableCopy;
|
|
||||||
|
|
||||||
+ (Class) class;
|
+ (Class) class;
|
||||||
+ (Class) superclass;
|
|
||||||
|
|
||||||
+ (BOOL) instancesRespondToSelector: (SEL)aSelector;
|
|
||||||
|
|
||||||
+ (IMP) instanceMethodForSelector: (SEL)aSelector;
|
|
||||||
- (IMP) methodForSelector: (SEL)aSelector;
|
|
||||||
+ (NSMethodSignature*) instanceMethodSignatureForSelector: (SEL)aSelector;
|
|
||||||
- (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector;
|
|
||||||
|
|
||||||
- (NSString*) description;
|
|
||||||
+ (NSString*) description;
|
+ (NSString*) description;
|
||||||
|
+ (IMP) instanceMethodForSelector: (SEL)aSelector;
|
||||||
|
+ (NSMethodSignature*) instanceMethodSignatureForSelector: (SEL)aSelector;
|
||||||
|
+ (BOOL) instancesRespondToSelector: (SEL)aSelector;
|
||||||
|
+ (id) new;
|
||||||
+ (void) poseAsClass: (Class)aClassObject;
|
+ (void) poseAsClass: (Class)aClassObject;
|
||||||
|
+ (id) setVersion: (int)aVersion;
|
||||||
|
+ (Class) superclass;
|
||||||
|
+ (int) version;
|
||||||
|
|
||||||
- (void) doesNotRecognizeSelector: (SEL)aSelector;
|
- (id) autorelease;
|
||||||
|
|
||||||
- (void) forwardInvocation: (NSInvocation*)anInvocation;
|
|
||||||
|
|
||||||
- (id) awakeAfterUsingCoder: (NSCoder*)aDecoder;
|
- (id) awakeAfterUsingCoder: (NSCoder*)aDecoder;
|
||||||
|
- (Class) class;
|
||||||
- (Class) classForArchiver;
|
- (Class) classForArchiver;
|
||||||
- (Class) classForCoder;
|
- (Class) classForCoder;
|
||||||
- (Class) classForPortCoder;
|
- (Class) classForPortCoder;
|
||||||
|
- (BOOL) conformsToProtocol: (Protocol *)aProtocol;
|
||||||
|
- (id) copy;
|
||||||
|
- (void) dealloc;
|
||||||
|
- (NSString*) description;
|
||||||
|
- (void) doesNotRecognizeSelector: (SEL)aSelector;
|
||||||
|
- (void) forwardInvocation: (NSInvocation*)anInvocation;
|
||||||
|
- (unsigned) hash;
|
||||||
|
- (id) init;
|
||||||
|
- (BOOL) isEqual: anObject;
|
||||||
|
- (BOOL) isKindOfClass: (Class)aClass;
|
||||||
|
- (BOOL) isMemberOfClass: (Class)aClass;
|
||||||
|
- (BOOL) isProxy;
|
||||||
|
- (IMP) methodForSelector: (SEL)aSelector;
|
||||||
|
- (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector;
|
||||||
|
- (id) mutableCopy;
|
||||||
|
- (id) performSelector: (SEL)aSelector;
|
||||||
|
- (id) performSelector: (SEL)aSelector withObject: anObject;
|
||||||
|
- (id) performSelector: (SEL)aSelector withObject: object1 withObject: object2;
|
||||||
|
- (void) release;
|
||||||
- (id) replacementObjectForArchiver: (NSArchiver*)anArchiver;
|
- (id) replacementObjectForArchiver: (NSArchiver*)anArchiver;
|
||||||
- (id) replacementObjectForCoder: (NSCoder*)anEncoder;
|
- (id) replacementObjectForCoder: (NSCoder*)anEncoder;
|
||||||
- (id) replacementObjectForPortCoder: (NSPortCoder*)aCoder;
|
- (id) replacementObjectForPortCoder: (NSPortCoder*)aCoder;
|
||||||
|
- (BOOL) respondsToSelector: (SEL)aSelector;
|
||||||
|
- (id) retain;
|
||||||
+ (id) setVersion: (int)aVersion;
|
- (unsigned) retainCount;
|
||||||
+ (int) version;
|
- (id) self;
|
||||||
|
- (Class) superclass;
|
||||||
|
- (NSZone*) zone;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to allocate memory to hold an object, and initialise the
|
||||||
|
* class of the object to be aClass etc. The allocated memory will
|
||||||
|
* be extraBytes larger than the space actually needed to hold the
|
||||||
|
* instance variables of the object.<br />
|
||||||
|
* This function is used by the [NSObject-allocWithZone:] mnethod.
|
||||||
|
*/
|
||||||
GS_EXPORT NSObject *
|
GS_EXPORT NSObject *
|
||||||
NSAllocateObject(Class aClass, unsigned extraBytes, NSZone *zone);
|
NSAllocateObject(Class aClass, unsigned extraBytes, NSZone *zone);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to release the memory used by an object.<br />
|
||||||
|
* This function is used by the [NSObject-dealloc] mnethod.
|
||||||
|
*/
|
||||||
GS_EXPORT void
|
GS_EXPORT void
|
||||||
NSDeallocateObject(NSObject *anObject);
|
NSDeallocateObject(NSObject *anObject);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to copy anObject. This makes a bitwise copy of anObject to
|
||||||
|
* memory allocated from zone. The allocated memory will be extraBytes
|
||||||
|
* longer than that necessary to actually store the instance variables
|
||||||
|
* of the copied object.<br />
|
||||||
|
* This is used by the [NSObject-copyWithZone:] method.
|
||||||
|
*/
|
||||||
GS_EXPORT NSObject *
|
GS_EXPORT NSObject *
|
||||||
NSCopyObject(NSObject *anObject, unsigned extraBytes, NSZone *zone);
|
NSCopyObject(NSObject *anObject, unsigned extraBytes, NSZone *zone);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a flag to indicate whether anObject should be retained or
|
||||||
|
* copied in order to make a copy in the specified zone.<br />
|
||||||
|
* Basically, this tests to see if anObject was allocated from
|
||||||
|
* requestedZone and returns YES if it was.
|
||||||
|
*/
|
||||||
GS_EXPORT BOOL
|
GS_EXPORT BOOL
|
||||||
NSShouldRetainWithZone(NSObject *anObject, NSZone *requestedZone);
|
NSShouldRetainWithZone(NSObject *anObject, NSZone *requestedZone);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the extra reference count of anObject. The reference count
|
* Return the extra reference count of anObject. The retain count
|
||||||
* for an object is this value plus one.
|
* for an object is this value plus one.
|
||||||
*/
|
*/
|
||||||
GS_EXPORT unsigned
|
GS_EXPORT unsigned
|
||||||
|
@ -161,7 +195,7 @@ NSExtraRefCount(id anObject);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increment the extra reference count for anObject. This is used
|
* Increment the extra reference count for anObject. This is used
|
||||||
* by the -retain method.
|
* by the [NSObject-retain] method.
|
||||||
*/
|
*/
|
||||||
GS_EXPORT void
|
GS_EXPORT void
|
||||||
NSIncrementExtraRefCount(id anObject);
|
NSIncrementExtraRefCount(id anObject);
|
||||||
|
@ -169,7 +203,8 @@ NSIncrementExtraRefCount(id anObject);
|
||||||
/**
|
/**
|
||||||
* Examines the extra reference count for the object and, if non-zero
|
* Examines the extra reference count for the object and, if non-zero
|
||||||
* decrements it. Returns a flag to say whether the count was zero
|
* decrements it. Returns a flag to say whether the count was zero
|
||||||
* (and hence whether the extra refrence count was decremented).
|
* (and hence whether the extra refrence count was decremented).<br />
|
||||||
|
* This us used by the [NSObject-release] method.
|
||||||
*/
|
*/
|
||||||
GS_EXPORT BOOL
|
GS_EXPORT BOOL
|
||||||
NSDecrementExtraRefCountWasZero(id anObject);
|
NSDecrementExtraRefCountWasZero(id anObject);
|
||||||
|
|
|
@ -2698,7 +2698,7 @@ static NSCharacterSet *tokenSet = nil;
|
||||||
/**
|
/**
|
||||||
* Adds a part to a multipart document
|
* Adds a part to a multipart document
|
||||||
*/
|
*/
|
||||||
- (void) addContent: (GSMimeDocument*)newContent
|
- (void) addContent: (id)newContent
|
||||||
{
|
{
|
||||||
if (content == nil)
|
if (content == nil)
|
||||||
{
|
{
|
||||||
|
|
|
@ -758,31 +758,51 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simply calls the +allocWithZone: method passing it
|
||||||
|
* NSDefaultMallocZone() as an argument.
|
||||||
|
*/
|
||||||
+ (id) alloc
|
+ (id) alloc
|
||||||
{
|
{
|
||||||
return [self allocWithZone: NSDefaultMallocZone()];
|
return [self allocWithZone: NSDefaultMallocZone()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance of a class by calling NSAllocateObject()
|
||||||
|
*/
|
||||||
+ (id) allocWithZone: (NSZone*)z
|
+ (id) allocWithZone: (NSZone*)z
|
||||||
{
|
{
|
||||||
return NSAllocateObject (self, 0, z);
|
return NSAllocateObject (self, 0, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the receiver.
|
||||||
|
*/
|
||||||
+ (id) copyWithZone: (NSZone*)z
|
+ (id) copyWithZone: (NSZone*)z
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns a new instance by calling +alloc and -init
|
||||||
|
*/
|
||||||
+ (id) new
|
+ (id) new
|
||||||
{
|
{
|
||||||
return [[self alloc] init];
|
return [[self alloc] init];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns a copy of the reciever by calling -copyWithZone:
|
||||||
|
* passing NSDefaultMallocZone()
|
||||||
|
*/
|
||||||
- (id) copy
|
- (id) copy
|
||||||
{
|
{
|
||||||
return [(id)self copyWithZone: NULL];
|
return [(id)self copyWithZone: NSDefaultMallocZone()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deallocates the receiver by calling NSDeallocateObject()
|
||||||
|
*/
|
||||||
- (void) dealloc
|
- (void) dealloc
|
||||||
{
|
{
|
||||||
NSDeallocateObject (self);
|
NSDeallocateObject (self);
|
||||||
|
@ -795,26 +815,46 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialises the receiver ... the NSObject implementation simply returns self.
|
||||||
|
*/
|
||||||
- (id) init
|
- (id) init
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and rturns a mutable copy of the receiver by calling
|
||||||
|
* -mutableCopyWithZone: passing NSDefaultMallocZone().
|
||||||
|
*/
|
||||||
- (id) mutableCopy
|
- (id) mutableCopy
|
||||||
{
|
{
|
||||||
return [(id)self mutableCopyWithZone: NULL];
|
return [(id)self mutableCopyWithZone: NSDefaultMallocZone()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the super class from which the recevier was derived.
|
||||||
|
*/
|
||||||
+ (Class) superclass
|
+ (Class) superclass
|
||||||
{
|
{
|
||||||
return class_get_super_class (self);
|
return class_get_super_class (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the super class from which the receviers class was derived.
|
||||||
|
*/
|
||||||
- (Class) superclass
|
- (Class) superclass
|
||||||
{
|
{
|
||||||
return object_get_super_class (self);
|
return object_get_super_class (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a flag to say if instances of the receiver class will
|
||||||
|
* respond to the specified selector. This ignores situations
|
||||||
|
* where a subclass implements -forwardInvocation: to respond to
|
||||||
|
* selectors not normally handled ... in these cases the subclass
|
||||||
|
* may override this method to handle it.
|
||||||
|
*/
|
||||||
+ (BOOL) instancesRespondToSelector: (SEL)aSelector
|
+ (BOOL) instancesRespondToSelector: (SEL)aSelector
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -824,6 +864,9 @@ static BOOL double_release_check_enabled = NO;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a flag to say whether the receiving class conforms to aProtocol
|
||||||
|
*/
|
||||||
+ (BOOL) conformsToProtocol: (Protocol*)aProtocol
|
+ (BOOL) conformsToProtocol: (Protocol*)aProtocol
|
||||||
{
|
{
|
||||||
struct objc_protocol_list* proto_list;
|
struct objc_protocol_list* proto_list;
|
||||||
|
@ -853,9 +896,13 @@ static BOOL double_release_check_enabled = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a flag to say whether the class of the receiver conforms
|
||||||
|
* to aProtocol.
|
||||||
|
*/
|
||||||
- (BOOL) conformsToProtocol: (Protocol*)aProtocol
|
- (BOOL) conformsToProtocol: (Protocol*)aProtocol
|
||||||
{
|
{
|
||||||
return [[self class] conformsToProtocol:aProtocol];
|
return [[self class] conformsToProtocol: aProtocol];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (IMP) instanceMethodForSelector: (SEL)aSelector
|
+ (IMP) instanceMethodForSelector: (SEL)aSelector
|
||||||
|
@ -866,6 +913,10 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return get_imp((Class)self, aSelector);
|
return get_imp((Class)self, aSelector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a pointer to the C function implementing the method used
|
||||||
|
* to respond to messages with aSelector.
|
||||||
|
*/
|
||||||
- (IMP) methodForSelector: (SEL)aSelector
|
- (IMP) methodForSelector: (SEL)aSelector
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -877,6 +928,11 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return get_imp(GSObjCClass(self), aSelector);
|
return get_imp(GSObjCClass(self), aSelector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a pointer to the C function implementing the method used
|
||||||
|
* to respond to messages with aSelector whihc are sent to instances
|
||||||
|
* of the receiving class.
|
||||||
|
*/
|
||||||
+ (NSMethodSignature*) instanceMethodSignatureForSelector: (SEL)aSelector
|
+ (NSMethodSignature*) instanceMethodSignatureForSelector: (SEL)aSelector
|
||||||
{
|
{
|
||||||
struct objc_method* mth = class_get_instance_method(self, aSelector);
|
struct objc_method* mth = class_get_instance_method(self, aSelector);
|
||||||
|
@ -884,6 +940,10 @@ static BOOL double_release_check_enabled = NO;
|
||||||
: nil;
|
: nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the method signature describing how the receiver would handle
|
||||||
|
* a message with aSelector.
|
||||||
|
*/
|
||||||
- (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector
|
- (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector
|
||||||
{
|
{
|
||||||
const char *types;
|
const char *types;
|
||||||
|
@ -915,17 +975,29 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return [NSMethodSignature signatureWithObjCTypes: types];
|
return [NSMethodSignature signatureWithObjCTypes: types];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a string describing the receiver. The default implementation
|
||||||
|
* gives the class and memory location of the rceiver.
|
||||||
|
*/
|
||||||
- (NSString*) description
|
- (NSString*) description
|
||||||
{
|
{
|
||||||
return [NSString stringWithFormat: @"<%s: %lx>",
|
return [NSString stringWithFormat: @"<%s: %lx>",
|
||||||
object_get_class_name(self), (unsigned long)self];
|
object_get_class_name(self), (unsigned long)self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a string describing the receiving class. The default implementation
|
||||||
|
* gives the name of the class by calling NSStringFromClass().
|
||||||
|
*/
|
||||||
+ (NSString*) description
|
+ (NSString*) description
|
||||||
{
|
{
|
||||||
return [NSString stringWithCString: object_get_class_name(self)];
|
return NSStringFromClass(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up the ObjC runtime so that the receiver is used wherever code
|
||||||
|
* calls for aClassObject to be used.
|
||||||
|
*/
|
||||||
+ (void) poseAsClass: (Class)aClassObject
|
+ (void) poseAsClass: (Class)aClassObject
|
||||||
{
|
{
|
||||||
class_pose_as(self, aClassObject);
|
class_pose_as(self, aClassObject);
|
||||||
|
@ -935,31 +1007,45 @@ static BOOL double_release_check_enabled = NO;
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Raises an invalid argument exception providing infomration about
|
||||||
|
* the receivers inability to handle aSelector.
|
||||||
|
*/
|
||||||
- (void) doesNotRecognizeSelector: (SEL)aSelector
|
- (void) doesNotRecognizeSelector: (SEL)aSelector
|
||||||
{
|
{
|
||||||
[NSException raise: NSInvalidArgumentException
|
[NSException raise: NSInvalidArgumentException
|
||||||
format: @"%s(%s) does not recognize %s",
|
format: @"%s(%s) does not recognize %s",
|
||||||
object_get_class_name(self),
|
object_get_class_name(self),
|
||||||
GSObjCIsInstance(self) ? "instance" : "class",
|
GSObjCIsInstance(self) ? "instance" : "class",
|
||||||
sel_get_name(aSelector)];
|
sel_get_name(aSelector)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (retval_t) forward:(SEL)aSel :(arglist_t)argFrame
|
- (retval_t) forward: (SEL)aSel : (arglist_t)argFrame
|
||||||
{
|
{
|
||||||
NSInvocation *inv;
|
NSInvocation *inv;
|
||||||
|
|
||||||
inv = AUTORELEASE([[NSInvocation alloc] initWithArgframe: argFrame
|
inv = AUTORELEASE([[NSInvocation alloc] initWithArgframe: argFrame
|
||||||
selector: aSel]);
|
selector: aSel]);
|
||||||
[self forwardInvocation:inv];
|
[self forwardInvocation: inv];
|
||||||
return [inv returnFrame: argFrame];
|
return [inv returnFrame: argFrame];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called automatically to handle a message sent to
|
||||||
|
* the receiver for which the receivers class has no method.<br />
|
||||||
|
* The default implemnentation calls -doesNotRecognizeSelector:
|
||||||
|
*/
|
||||||
- (void) forwardInvocation: (NSInvocation*)anInvocation
|
- (void) forwardInvocation: (NSInvocation*)anInvocation
|
||||||
{
|
{
|
||||||
[self doesNotRecognizeSelector:[anInvocation selector]];
|
[self doesNotRecognizeSelector: [anInvocation selector]];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called after the receiver has been created by decoding some sort
|
||||||
|
* of archive. Returns self. Subclasses may override this to perform
|
||||||
|
* some special initialisation upon being decoded.
|
||||||
|
*/
|
||||||
- (id) awakeAfterUsingCoder: (NSCoder*)aDecoder
|
- (id) awakeAfterUsingCoder: (NSCoder*)aDecoder
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
|
@ -1024,6 +1110,11 @@ static BOOL double_release_check_enabled = NO;
|
||||||
|
|
||||||
/* NSObject protocol */
|
/* NSObject protocol */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the receiver to the current autorelease pool, so that it will be
|
||||||
|
* sent a -release message when the pool is destroyed.<br />
|
||||||
|
* Returns the receiver.
|
||||||
|
*/
|
||||||
- (id) autorelease
|
- (id) autorelease
|
||||||
{
|
{
|
||||||
#if GS_WITH_GC == 0
|
#if GS_WITH_GC == 0
|
||||||
|
@ -1044,31 +1135,57 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dummy method returning the receiver.
|
||||||
|
*/
|
||||||
+ (id) autorelease
|
+ (id) autorelease
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the receiver.
|
||||||
|
*/
|
||||||
+ (Class) class
|
+ (Class) class
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the class of which the receiver is an instance.
|
||||||
|
*/
|
||||||
- (Class) class
|
- (Class) class
|
||||||
{
|
{
|
||||||
return object_get_class(self);
|
return object_get_class(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the hash of the receiver. Subclasses should ensure that their
|
||||||
|
* implementations of this method obey the rule that if the -isEqual: method
|
||||||
|
* returns YES for two instances of the class, the -hash method returns the
|
||||||
|
* same value fro both instances.<br />
|
||||||
|
* The default implementation returns the address of the instance.
|
||||||
|
*/
|
||||||
- (unsigned) hash
|
- (unsigned) hash
|
||||||
{
|
{
|
||||||
return (unsigned)self;
|
return (unsigned)self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests anObject and the receiver for equality. The default implementation
|
||||||
|
* considers two objects to be equal only if they are the same object
|
||||||
|
* (ie occupy the same memory location).<br />
|
||||||
|
* If a subclass overrides this method, it should also override the -hash
|
||||||
|
* method so that if two objects are equal they both have the same hash.
|
||||||
|
*/
|
||||||
- (BOOL) isEqual: (id)anObject
|
- (BOOL) isEqual: (id)anObject
|
||||||
{
|
{
|
||||||
return (self == anObject);
|
return (self == anObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns YES if aClass is the NSObject class
|
||||||
|
*/
|
||||||
+ (BOOL) isKindOfClass: (Class)aClass
|
+ (BOOL) isKindOfClass: (Class)aClass
|
||||||
{
|
{
|
||||||
if (aClass == [NSObject class])
|
if (aClass == [NSObject class])
|
||||||
|
@ -1076,6 +1193,10 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns YES if the class of the receiver is either the same as aClass
|
||||||
|
* or is derived from (a subclass of) aClass.
|
||||||
|
*/
|
||||||
- (BOOL) isKindOfClass: (Class)aClass
|
- (BOOL) isKindOfClass: (Class)aClass
|
||||||
{
|
{
|
||||||
Class class = GSObjCClass(self);
|
Class class = GSObjCClass(self);
|
||||||
|
@ -1083,21 +1204,38 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return GSObjCIsKindOf(class, aClass);
|
return GSObjCIsKindOf(class, aClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns YES if aClass is the same as the receiving class.
|
||||||
|
*/
|
||||||
+ (BOOL) isMemberOfClass: (Class)aClass
|
+ (BOOL) isMemberOfClass: (Class)aClass
|
||||||
{
|
{
|
||||||
return (self == aClass) ? YES : NO;
|
return (self == aClass) ? YES : NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns YES if the class of the receiver is aClass
|
||||||
|
*/
|
||||||
- (BOOL) isMemberOfClass: (Class)aClass
|
- (BOOL) isMemberOfClass: (Class)aClass
|
||||||
{
|
{
|
||||||
return (GSObjCClass(self) == aClass) ? YES : NO;
|
return (GSObjCClass(self) == aClass) ? YES : NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a flag to differnetiate between 'true' objects, and objects
|
||||||
|
* which are proxies for other objects (ie they forward messages to the
|
||||||
|
* other objects).<br />
|
||||||
|
* The default implementation returns NO.
|
||||||
|
*/
|
||||||
- (BOOL) isProxy
|
- (BOOL) isProxy
|
||||||
{
|
{
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Causes the receiver to execute the method implementation corresponding
|
||||||
|
* to aSelector and returns the result.<br />
|
||||||
|
* The method must be one which takes no arguments and returns an object.
|
||||||
|
*/
|
||||||
- (id) performSelector: (SEL)aSelector
|
- (id) performSelector: (SEL)aSelector
|
||||||
{
|
{
|
||||||
IMP msg;
|
IMP msg;
|
||||||
|
@ -1119,6 +1257,11 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return (*msg)(self, aSelector);
|
return (*msg)(self, aSelector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Causes the receiver to execute the method implementation corresponding
|
||||||
|
* to aSelector and returns the result.<br />
|
||||||
|
* The method must be one which takes one argument and returns an object.
|
||||||
|
*/
|
||||||
- (id) performSelector: (SEL)aSelector withObject: (id) anObject
|
- (id) performSelector: (SEL)aSelector withObject: (id) anObject
|
||||||
{
|
{
|
||||||
IMP msg;
|
IMP msg;
|
||||||
|
@ -1141,6 +1284,11 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return (*msg)(self, aSelector, anObject);
|
return (*msg)(self, aSelector, anObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Causes the receiver to execute the method implementation corresponding
|
||||||
|
* to aSelector and returns the result.<br />
|
||||||
|
* The method must be one which takes two arguments and returns an object.
|
||||||
|
*/
|
||||||
- (id) performSelector: (SEL)aSelector
|
- (id) performSelector: (SEL)aSelector
|
||||||
withObject: (id) object1
|
withObject: (id) object1
|
||||||
withObject: (id) object2
|
withObject: (id) object2
|
||||||
|
@ -1204,6 +1352,13 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a flag to say if the receiver will
|
||||||
|
* respond to the specified selector. This ignores situations
|
||||||
|
* where a subclass implements -forwardInvocation: to respond to
|
||||||
|
* selectors not normally handled ... in these cases the subclass
|
||||||
|
* may override this method to handle it.
|
||||||
|
*/
|
||||||
- (BOOL) respondsToSelector: (SEL)aSelector
|
- (BOOL) respondsToSelector: (SEL)aSelector
|
||||||
{
|
{
|
||||||
return __objc_responds_to(self, aSelector);
|
return __objc_responds_to(self, aSelector);
|
||||||
|
@ -1256,31 +1411,53 @@ static BOOL double_release_check_enabled = NO;
|
||||||
return UINT_MAX;
|
return UINT_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the reciever.
|
||||||
|
*/
|
||||||
- (id) self
|
- (id) self
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the memory allocation zone in which the receiver is located.
|
||||||
|
*/
|
||||||
- (NSZone*) zone
|
- (NSZone*) zone
|
||||||
{
|
{
|
||||||
return GSObjCZone(self);
|
return GSObjCZone(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to encode the instance variables of the receiver to aCoder.<br />
|
||||||
|
* Subclasses should call the superclass method at the start of their
|
||||||
|
* own implementation.
|
||||||
|
*/
|
||||||
- (void) encodeWithCoder: (NSCoder*)aCoder
|
- (void) encodeWithCoder: (NSCoder*)aCoder
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to intialise instance variables of the receiver from aDecoder.<br />
|
||||||
|
* Subclasses should call the superclass method at the start of their
|
||||||
|
* own implementation.
|
||||||
|
*/
|
||||||
- (id) initWithCoder: (NSCoder*)aDecoder
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the version number of the receiving class.
|
||||||
|
*/
|
||||||
+ (int) version
|
+ (int) version
|
||||||
{
|
{
|
||||||
return class_get_version(self);
|
return class_get_version(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the version number of the receiving class.
|
||||||
|
*/
|
||||||
+ (id) setVersion: (int)aVersion
|
+ (id) setVersion: (int)aVersion
|
||||||
{
|
{
|
||||||
if (aVersion < 0)
|
if (aVersion < 0)
|
||||||
|
@ -1298,7 +1475,7 @@ static BOOL double_release_check_enabled = NO;
|
||||||
|
|
||||||
/* NEXTSTEP Object class compatibility */
|
/* NEXTSTEP Object class compatibility */
|
||||||
|
|
||||||
- error: (const char *)aString, ...
|
- (id) error: (const char *)aString, ...
|
||||||
{
|
{
|
||||||
#define FMT "error: %s (%s)\n%s\n"
|
#define FMT "error: %s (%s)\n%s\n"
|
||||||
char fmt[(strlen((char*)FMT)+strlen((char*)object_get_class_name(self))
|
char fmt[(strlen((char*)FMT)+strlen((char*)object_get_class_name(self))
|
||||||
|
@ -1316,10 +1493,12 @@ static BOOL double_release_check_enabled = NO;
|
||||||
#undef FMT
|
#undef FMT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
- (const char *) name
|
- (const char *) name
|
||||||
{
|
{
|
||||||
return object_get_class_name(self);
|
return object_get_class_name(self);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
- (BOOL) isKindOf: (Class)aClassObject
|
- (BOOL) isKindOf: (Class)aClassObject
|
||||||
{
|
{
|
||||||
|
@ -1419,22 +1598,39 @@ static BOOL double_release_check_enabled = NO;
|
||||||
|
|
||||||
/* GNU Object class compatibility */
|
/* GNU Object class compatibility */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to change the class used for autoreleasing objects.
|
||||||
|
*/
|
||||||
+ (void) setAutoreleaseClass: (Class)aClass
|
+ (void) setAutoreleaseClass: (Class)aClass
|
||||||
{
|
{
|
||||||
autorelease_class = aClass;
|
autorelease_class = aClass;
|
||||||
autorelease_imp = [self instanceMethodForSelector: autorelease_sel];
|
autorelease_imp = [self instanceMethodForSelector: autorelease_sel];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the class used to autorelease objects.
|
||||||
|
*/
|
||||||
+ (Class) autoreleaseClass
|
+ (Class) autoreleaseClass
|
||||||
{
|
{
|
||||||
return autorelease_class;
|
return autorelease_class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables runtime checking of retain/release/autorelease operations.<br />
|
||||||
|
* Whenever either -autorelease or -release is called, the contents of any
|
||||||
|
* autorelease pools will be checked to see if there are more outstanding
|
||||||
|
* release operations than the objects retain count. In which case an
|
||||||
|
* exception is raised to say that the object is released too many times.
|
||||||
|
*/
|
||||||
+ (void) enableDoubleReleaseCheck: (BOOL)enable
|
+ (void) enableDoubleReleaseCheck: (BOOL)enable
|
||||||
{
|
{
|
||||||
double_release_check_enabled = enable;
|
double_release_check_enabled = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compare the receiver with anObject to see which is greater.
|
||||||
|
* The default implementation orders by memory location.
|
||||||
|
*/
|
||||||
- (int) compare: (id)anObject
|
- (int) compare: (id)anObject
|
||||||
{
|
{
|
||||||
if (anObject == self)
|
if (anObject == self)
|
||||||
|
@ -1502,11 +1698,21 @@ static BOOL double_release_check_enabled = NO;
|
||||||
[(id)self descriptionWithLocale: aLocale indent: level]];
|
[(id)self descriptionWithLocale: aLocale indent: level]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a flag to say whether dealloc notifications should be done.<br />
|
||||||
|
* See the -setDeallocNotificationsActive: method.
|
||||||
|
*/
|
||||||
- (BOOL) deallocNotificationsActive
|
- (BOOL) deallocNotificationsActive
|
||||||
{
|
{
|
||||||
return deallocNotifications;
|
return deallocNotifications;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a flag to indicate whether dealloc notifications should be done.<br />
|
||||||
|
* If this flag is set, when an object is to be deallocated the -_dealloc
|
||||||
|
* method will be called first to notify the object that it is about to be
|
||||||
|
* deallocated.
|
||||||
|
*/
|
||||||
- (void) setDeallocNotificationsActive: (BOOL)flag
|
- (void) setDeallocNotificationsActive: (BOOL)flag
|
||||||
{
|
{
|
||||||
deallocNotifications = flag;
|
deallocNotifications = flag;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue