Up
Authors
- Richard Frith-Macdonald (
rfm@gnu.org
)
-
Date: Generated at 2025-02-11 22:19:38 +0100
Copyright: (C) 2003-2010 Free Software Foundation, Inc.
- Declared in:
- GNUstepBase/NSObject+GNUstepBase.h
Availability: Not in OpenStep/MacOS-X
Description forthcoming.
- (NSComparisonResult)
compare: (id)anObject;
Availability: Not in OpenStep/MacOS-X
WARNING: The
-compare:
method for NSObject is deprecated due to subclasses
declaring the same selector with conflicting
signatures. Comparision of arbitrary objects is
not just meaningless but also dangerous as most
concrete implementations expect comparable objects
as arguments often accessing instance variables
directly. This method will be removed in a future
release.
- (BOOL)
isInstance;
Availability: Not in OpenStep/MacOS-X
For backward compatibility only... use
"class_isMetaClass()" on the class of
the receiver instead.
- (BOOL)
makeImmutable;
Availability: Not in OpenStep/MacOS-X
Transmutes the receiver into an immutable
version of the same object. Returns
YES
if the receiver has become
immutable, NO
otherwise.
The
default implementation returns NO
.
Mutable classes which have an immutable
counterpart they can efficiently change into,
should override to transmute themselves and return
YES
.
Immutable classes should
override this to simply return YES
with no further action.
This method is used in
methods which are declared to return immutable
objects (eg. an NSArray), but which create and
build mutable ones internally.
- (id)
makeImmutableCopyOnFail: (BOOL)force;
Availability: Not in OpenStep/MacOS-X
DEPRECATED... do not use. Transmutes the
receiver into an immutable version of the same
object and returns the result.
If the
receiver is not a mutable object or cannot be
simply transmuted, then this method either returns
the receiver unchanged or, if the force flag
is set to YES
, returns an autoreleased copy
of the receiver.
Mutable classes should override
this default implementation.
This method is
used in methods which are declared to return immutable
objects (eg. an NSArray), but which create and
build mutable ones internally.
- (id)
notImplemented: (SEL)aSel;
Availability: Not in OpenStep/MacOS-X
Message sent when an implementation wants to
explicitly exclude a method (but cannot due to
compiler constraint), and wants to make sure it is
not called by mistake. Default implementation raises an
exception at runtime.
- (id)
shouldNotImplement: (SEL)aSel;
Availability: Not in OpenStep/MacOS-X
Message sent when an implementation wants to
explicitly exclude a method (but cannot due to
compiler constraint) and forbid that subclasses
implement it. Default implementation raises an
exception at runtime. If a subclass does
implement this method, however, the superclass's
implementation will not be called, so this
is not a perfect mechanism.
- (id)
subclassResponsibility: (SEL)aSel;
Availability: Not in OpenStep/MacOS-X
Message sent when an implementation wants to
explicitly require a subclass to implement a
method (but cannot at compile time since there is no
abstract
keyword in Objective-C).
Default implementation raises an exception at
runtime to alert developer that he/she forgot to
override a method.
- Declared in:
- GNUstepBase/NSObject+GNUstepBase.h
Availability: Not in OpenStep/MacOS-X
This is an informal protocol... classes may implement
the method and register themselves to have it called on
process exit.
+ (void)
atExit;
Availability: Not in OpenStep/MacOS-X
This method is called on exit for any class which
implements it and which has called
+registerAtExit
to register it to be called.
The order in which
methods for different classes is called is the
reverse of the order in which the classes were
registered, but it's best to assume the method
can not depend on any other class being in a usable
state at the point when the method is called (rather
like +load).
Typical use would be to release
memory occupied by class data structures so that
memory usage analysis software will not think the
memory has been leaked.
- Declared in:
- GNUstepBase/NSObject+GNUstepBase.h
Availability: Not in OpenStep/MacOS-X
Category for methods handling leaked memory clean-up
on exit of process (for use when debugging memory leaks).
You enable this by calling the
+setShouldCleanUp:
method (done implicitly by gnustep-base if the
GNUSTEP_SHOULD_CLEAN_UP environment
variable is set to
YES
).
Your
class then has two options for performing clean-up when
the process ends:
1. Use the
+keep:at:
method to register static/global variables whose
contents are to be retained for the lifetime of
the program (up to exit) and either ignored or released
depending on the clean-up setting in force when
the program exits.
This mechanism is simple and
should be sufficient for many classes.
2. Implement an
+atExit
method to be run when the process ends and, within
your
+initialize
implementation,
+registerAtExit
to have your
+atExit
method called when the process exits. Within the
+atExit
method you may call
+shouldCleanUp
to determine whether celan up has been requested.
The order in which 'leaked' objects are released and
+atExit
methods are called on process exist is the reverse
of the order in which they werse set up using this API.
+ (BOOL)
isExiting;
Availability: Not in OpenStep/MacOS-X
Returns YES
if the process is exiting
(and perhaps performing clean-up).
+ (id)
keep: (id)anObject
at: (id*)anAddress;
Availability: Not in OpenStep/MacOS-X
This method stores anObject at
anAddress (which should be a static or
global variable) and retains it. The code notes that
the object should persist until the process exits. If
clean-up is enabled the object will be released
(and the address content zeroed out) upon process
exit. If this method is called while the process is
already exiting it simply zeros out the memory
location then returns nil
, otherwise
it returns the object stored at the memory location.
Raises an exception if anObject is
nil
or anAddress is NULL or
the old value at anAddresss is not nil
(unless the process is already exiting).
+ (id)
leak: (id)anObject;
Availability: Not in OpenStep/MacOS-X
+ (id)
leakAt: (id*)anAddress;
Availability: Not in OpenStep/MacOS-X
+ (BOOL)
registerAtExit;
Availability: Not in OpenStep/MacOS-X
Sets the receiver to have its
+atExit
method called at the point when the process
terminates.
Returns
YES
on
success and
NO
on failure (if the
class does not implement
+atExit
or if it is already registered to call it).
Implemented as a call to
+registerAtExit:
with the selector for the
+atExit
method as its argument.
+ (BOOL)
registerAtExit: (SEL)aSelector;
Availability: Not in OpenStep/MacOS-X
Sets the receiver to have the specified method called
at the point when the process terminates.
Returns
YES
on success and NO
on
failure (if the class does not implement the method
or if it is already registered to call a method at
exit).
+ (void)
setShouldCleanUp: (BOOL)aFlag;
Availability: Not in OpenStep/MacOS-X
Specifies the default clean-up behavior on
process exit... the value returned by the NSObject
implementation of the
+shouldCleanUp
method.
Calling this method with a
YES
argument implicitly enables the
support for clean-up at exit.
The GNUstep
Base library calls this method with the value obtained
from the GNUSTEP_SHOULD_CLEAN_UP environment variable
when NSObject is initialised.
+ (BOOL)
shouldCleanUp;
Availability: Not in OpenStep/MacOS-X
Returns a flag indicating whether the receiver
should clean up its data structures etc at process
exit.
The NSObject implementation returns the
value set by the
+setShouldCleanUp:
method but subclasses may override this.
+ (void)
trackOwnership;
Availability: Not in OpenStep/MacOS-X
Turns on tracking of the ownership for all instances
of the receiver. This could have major performance
impact and if possible you should not call this
class method but should use the instance method
instead.
- (void)
trackOwnership;
Availability: Not in OpenStep/MacOS-X
Turns on tracking of ownership for the receiver.
This works best in conjunction with leak
detection (eg as provided by
AddressSanitizer/LeakSanitizer)
which reports leaked memory at program exit: once you
know where leaked memory was allocated, you can alter
the code to call
-trackOwnership
on the offending object, and can then see a log of the
object life cycle to work out why it is leaked.
This operates by altering the class of the
receiver by overriding the
-retain
, -release
, and
-dealloc
methods to report when they are called for the
instance. The logs include the instance address
and the stack trace at which the method was called.
This method also turns on atexit handing to
report tracked instances which have not been
deallocated by the time the process exits. All
instances of a tracked class (and its subclasses)
incur an overhead when the overridden methods are
executed, and that overhead scales with the
number of tracked instances (and classes) so
tracking should be used sparingly (probably never
in production code).
- Declared in:
- GNUstepBase/NSObject+GNUstepBase.h
Availability: Not in OpenStep/MacOS-X
This is an informal protocol; classes may implement the
+contentSizeOf:excluding:
method to report how much memory is used by any
objects/pointers it acts as a container for.
Code may call the
-sizeInBytesExcluding:
or
-sizeInBytes
method to determine how much heap memory an object
(and its content) occupies.
+ (
NSUInteger)
contentSizeOf: (NSObject*)obj
excluding: (NSHashTable*)exclude;
Availability: Not in OpenStep/MacOS-X
This method returns the size of the memory used by the
object instance variables of the target object
(excluding any in the specified set).
This is not the memory occupied by instance variable
pointers. It is the memory referenced by any
objects inside the target.
This method is
not intended to be overridden, rather it is provided
for use as a helper for the
-sizeOfContentExcluding:
method.
This method must not be called for a
mutable object unless it is protected by a locking
mechanism to prevent mutation while it is
examining the instance variables of the object.
@interface foo : bar
{
id a; // Some object
id b; // More storage
unsigned capacity; // Buffer size
char *p; // The buffer
}
@end
@implementation foo
- (NSUInteger) sizeOfContentExcluding: (NSHashTable*)exclude
{
NSUInteger size;
// get the size of the objects (a and b)
size = [NSObject contentSizeOf: self
excluding: exclude];
// add the memory pointed to by p
size += capacity * sizeof(char);
return size;
}
@end
- (
NSUInteger)
sizeInBytes;
Availability: Not in OpenStep/MacOS-X
Convenience method calling
-sizeInBytesExcluding:
with a newly created exclusion hash table, and
destroying the table once the size is
calculated.
- (
NSUInteger)
sizeInBytesExcluding: (NSHashTable*)exclude;
Availability: Not in OpenStep/MacOS-X
This method returns the memory usage of the receiver,
excluding any objects already present in the
exclude table.
The argument is a
hash table configured to hold non-retained pointer
objects and is used to inform the receiver that its
size should not be counted again if it's already in
the table.
The NSObject implementation returns
zero if the receiver is in the table, but otherwise
adds itself to the table and returns its memory
footprint (the sum of all of its instance
variables, plus the result of calling
-sizeOfContentExcluding:
for the instance).
Classes should not override
this method, instead they should implement
-sizeOfContentExcluding:
to return the extra memory usage of the pointer/object
instance variables (heap memory) they add to their
superclass.
NB. mutable objects must
either prevent mutation while calculating their
content size, or must override
-sizeOfContentExcluding:
to refrain from dealing with content which might change.
- (
NSUInteger)
sizeOfContentExcluding: (NSHashTable*)exclude;
Availability: Not in OpenStep/MacOS-X
This method is called by
-sizeInBytesExcluding:
to calculate the size of any objects or heap memory
contained by the receiver.
The base class
implementation simply returns zero (as it is
not possible to safely calculate content sizes of
mutable objects), but subclasses should override it
to provide correct information where possible (eg if the
object is immutable or if locking is used to prevent
mutation while calculating content size).
Subclasses may use the
+contentSizeOf:excluding:
method as a convenience to provide the sizes of
object instance variables.
- (
NSUInteger)
sizeOfInstance;
Availability: Not in OpenStep/MacOS-X
Helper method called by
-sizeInBytesExcluding:
to return the size of the instance excluding any
contents (things referenced by pointers).
Up