Adopted by | |
Framework | /System/Library/Frameworks/Foundation.framework |
Availability | Available in Mac OS X v10.0 and later. |
Declared in | NSObject.h |
Companion guides |
The NSObject
protocol groups methods that are fundamental to all Objective-C objects.
If an object conforms to this protocol, it can be considered a first-class object. Such an object can be asked about its:
Class, and the place of its class in the inheritance hierarchy
Conformance to protocols
Ability to respond to a particular message
In addition, objects that conform to this protocol—with its retain, release, and autorelease methods—can also integrate with the object management and deallocation scheme defined in Foundation (for more information see, for example, Memory Management Programming Guide for Cocoa). Thus, an object that conforms to the NSObject
protocol can be managed by container objects like those defined by NSArray
and NSDictionary
.
The Cocoa root class, NSObject
, adopts this protocol, so all objects inheriting from NSObject
have the features described by this protocol.
Adds the receiver to the current autorelease pool.
- (id)autorelease
self
.
You add an object to an autorelease pool so it will receive a release
message—and thus might be deallocated—when the pool is destroyed. For more information on the autorelease mechanism, see Memory Management Programming Guide for Cocoa.
If garbage collection is enabled, this method is a no-op.
NSObject.h
Returns the class object for the receiver’s class.
- (Class)class
The class object for the receiver’s class.
+ class
(NSObject
class)NSObject.h
Returns a Boolean value that indicates whether the receiver conforms to a given protocol.
- (BOOL)conformsToProtocol:(Protocol *)aProtocol
A protocol object that represents a particular protocol.
YES
if the receiver conforms to aProtocol, otherwise NO
.
This method works identically to the conformsToProtocol:
class method declared in NSObject
. It’s provided as a convenience so that you don’t need to get the class object to find out whether an instance can respond to a given set of messages.
NSObject.h
Returns a string that describes the contents of the receiver.
- (NSString *)description
A string that describes the contents of the receiver.
The debugger’s print-object command indirectly invokes this method to produce a textual description of an object.
NSObject.h
Returns an integer that can be used as a table address in a hash table structure.
- (NSUInteger)hash
An integer that can be used as a table address in a hash table structure.
If two objects are equal (as determined by the isEqual:
method), they must have the same hash value. This last point is particularly important if you define hash
in a subclass and intend to put instances of that subclass into a collection.
If a mutable object is added to a collection that uses hash values to determine the object’s position in the collection, the value returned by the hash
method of the object must not change while the object is in the collection. Therefore, either the hash
method must not rely on any of the object’s internal state information or you must make sure the object’s internal state information does not change while the object is in the collection. Thus, for example, a mutable dictionary can be put in a hash table but you must not change it while it is in there. (Note that it can be difficult to know whether or not a given object is in a collection.)
NSObject.h
Returns a Boolean value that indicates whether the receiver and a given object are equal.
- (BOOL)isEqual:(id)anObject
The object to be compared to the receiver.
YES
if the receiver and anObject are equal, otherwise NO
.
This method defines what it means for instances to be equal. For example, a container object might define two containers as equal if their corresponding objects all respond YES
to an isEqual:
request. See the NSData, NSDictionary, NSArray, and NSString class specifications for examples of the use of this method.
If two objects are equal, they must have the same hash value. This last point is particularly important if you define isEqual:
in a subclass and intend to put instances of that subclass into a collection. Make sure you also define hash
in your subclass.
NSObject.h
Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class.
- (BOOL)isKindOfClass:(Class)aClass
A class object representing the Objective-C class to be tested.
YES
if the receiver is an instance of aClass or an instance of any class that inherits from aClass, otherwise NO
.
For example, in this code, isKindOfClass:
would return YES
because, in Foundation, the NSArchiver
class inherits from NSCoder
:
NSMutableData *myData = [NSMutableData dataWithCapacity:30]; |
id anArchiver = [[NSArchiver alloc] initForWritingWithMutableData:myData]; |
if ( [anArchiver isKindOfClass:[NSCoder class]] ) |
... |
Be careful when using this method on objects represented by a class cluster. Because of the nature of class clusters, the object you get back may not always be the type you expected. If you call a method that returns a class cluster, the exact type returned by the method is the best indicator of what you can do with that object. For example, if a method returns a pointer to an NSArray
object, you should not use this method to see if the array is mutable, as shown in the following code:
// DO NOT DO THIS! |
if ([myArray isKindOfClass:[NSMutableArray class]]) |
{ |
// Modify the object |
} |
If you use such constructs in your code, you might think it is alright to modify an object that in reality should not be modified. Doing so might then create problems for other code that expected the object to remain unchanged.
If the receiver is a class object, this method returns YES
if aClass is a Class object of the same type, NO
otherwise.
NSObject.h
Returns a Boolean value that indicates whether the receiver is an instance of a given class.
- (BOOL)isMemberOfClass:(Class)aClass
A class object representing the Objective-C class to be tested.
YES
if the receiver is an instance of aClass, otherwise NO
.
For example, in this code, isMemberOfClass:
would return NO
:
NSMutableData *myData = [NSMutableData dataWithCapacity:30]; |
id anArchiver = [[NSArchiver alloc] initForWritingWithMutableData:myData]; |
if ([anArchiver isMemberOfClass:[NSCoder class]]) |
... |
Class objects may be compiler-created objects but they still support the concept of membership. Thus, you can use this method to verify that the receiver is a specific Class object.
NSObject.h
Returns a Boolean value that indicates whether the receiver does not descend from NSObject
.
- (BOOL)isProxy
NO
if the receiver really descends from NSObject
, otherwise YES
.
This method is necessary because sending isKindOfClass:
or isMemberOfClass:
to an NSProxy
object will test the object the proxy stands in for, not the proxy itself. Use this method to test if the receiver is a proxy (or a member of some other root class).
NSObject.h
Sends a specified message to the receiver and returns the result of the message.
- (id)performSelector:(SEL)aSelector
A selector identifying the message to send. If aSelector is NULL
, an NSInvalidArgumentException
is raised.
An object that is the result of the message.
The performSelector:
method is equivalent to sending an aSelector message directly to the receiver. For example, all three of the following messages do the same thing:
id myClone = [anObject copy]; |
id myClone = [anObject performSelector:@selector(copy)]; |
id myClone = [anObject performSelector:sel_getUid("copy")]; |
However, the performSelector:
method allows you to send messages that aren’t determined until runtime. A variable selector can be passed as the argument:
SEL myMethod = findTheAppropriateSelectorForTheCurrentSituation(); |
[anObject performSelector:myMethod]; |
The aSelector argument should identify a method that takes no arguments. For methods that return anything other than an object, use NSInvocation.
NSObject.h
Sends a message to the receiver with an object as the argument.
- (id)performSelector:(SEL)aSelector withObject:(id)anObject
A selector identifying the message to send. If aSelector is NULL
, an NSInvalidArgumentException
is raised.
An object that is the sole argument of the message.
An object that is the result of the message.
This method is the same as performSelector:
except that you can supply an argument for aSelector. aSelector should identify a method that takes a single argument of type id. For methods with other argument types and return values, use NSInvocation.
– performSelector:withObject:withObject:
– methodForSelector:
(NSObject
class)NSObject.h
Sends a message to the receiver with two objects as as arguments.
- (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject
A selector identifying the message to send. If aSelector is NULL
, an NSInvalidArgumentException
is raised.
An object that is the first argument of the message.
An object that is the second argument of the message
An object that is the result of the message.
This method is the same as performSelector:
except that you can supply two arguments for aSelector. aSelector should identify a method that can take two arguments of type id. For methods with other argument types and return values, use NSInvocation.
– performSelector:withObject:
– methodForSelector:
(NSObject
class)NSObject.h
Decrements the receiver’s reference count.
- (oneway void)release
The receiver is sent a dealloc
message when its reference count reaches 0
.
You would only implement this method to define your own reference-counting scheme. Such implementations should not invoke the inherited method; that is, they should not include a release message to super
.
For more information on the reference counting mechanism, see Memory Management Programming Guide for Cocoa.
If garbage collection is enabled, this method is a no-op.
You must complete the object initialization (using an init method) before invoking release
. For example, the following code shows an error:
id anObject = [MyObject alloc]; |
[anObject release]; |
You may call release
from within an init method if initialization fails for some reason provided that you have at least called superclass's designated initializer.
NSObject.h
Returns a Boolean value that indicates whether the receiver implements or inherits a method that can respond to a specified message.
- (BOOL)respondsToSelector:(SEL)aSelector
A selector that identifies a message.
YES
if the receiver implements or inherits a method that can respond to aSelector, otherwise NO
.
The application is responsible for determining whether a NO
response should be considered an error.
You cannot test whether an object inherits a method from its superclass by sending respondsToSelector:
to the object using the super
keyword. This method will still be testing the object as a whole, not just the superclass’s implementation. Therefore, sending respondsToSelector:
to super
is equivalent to sending it to self
. Instead, you must invoke the NSObject
class method instancesRespondToSelector:
directly on the object’s superclass, as illustrated in the following code fragment.
if( [MySuperclass instancesRespondToSelector:@selector(aMethod)] ) { |
// invoke the inherited method |
[super aMethod]; |
} |
You cannot simply use [[self superclass] instancesRespondToSelector:@selector(aMethod)]
since this may cause the method to fail if it is invoked by a subclass.
Note that if the receiver is able to forward aSelector messages to another object, it will be able to respond to the message, albeit indirectly, even though this method returns NO
.
– forwardInvocation:
(NSObject
class)+ instancesRespondToSelector:
(NSObject
class)NSObject.h
Increments the receiver’s reference count.
- (id)retain
self
.
You send an object a retain
message when you want to prevent it from being deallocated without your express permission.
An object is deallocated automatically when its reference count reaches 0. retain
messages increment the reference count, and release
messages decrement it. For more information on this mechanism, see Memory Management Programming Guide for Cocoa.
As a convenience, retain
returns self
because it is often used in nested expressions:
NSString *systemApps = [[NSString |
stringWithCString:"/Applications"] retain]; |
You would implement this method only if you were defining your own reference-counting scheme. Such implementations must return self
and should not invoke the inherited method by sending a retain
message to super
.
If garbage collection is enabled, this method is a no-op.
NSObject.h
Returns the receiver’s reference count.
- (NSUInteger)retainCount
The receiver’s reference count.
You might override this method in a class to implement your own reference-counting scheme. For objects that never get released (that is, their release
method does nothing), this method should return UINT_MAX
, as defined in <limits.h>
.
The retainCount
method does not account for any pending autorelease
messages sent to the receiver.
Important: This method is typically of no value in debugging memory management issues. Because any number of framework objects may have retained an object in order to hold references to it, while at the same time autorelease pools may be holding any number of deferred releases on an object, it is very unlikely that you can get useful information from this method.
To understand the fundamental rules of memory management that you must abide by, read Memory Management Rules. To diagnose memory management problems, use a suitable tool:
The LLVM/Clang Static analyzer can typically find memory management problems even before you run your program.
The Object Alloc instrument in the Instruments application (see Instruments User Guide) can track object allocation and destruction.
Shark (see Shark User Guide) also profiles memory allocations (amongst numerous other aspects of your program).
If garbage collection is enabled, the return value is undefined.
NSObject.h
Returns the receiver.
- (id)self
The receiver.
NSObject.h
Returns the class object for the receiver’s superclass.
- (Class)superclass
The class object for the receiver’s superclass.
+ superclass
(NSObject
class)NSObject.h
Returns a pointer to the zone from which the receiver was allocated.
- (NSZone *)zone
A pointer to the zone from which the receiver was allocated.
Objects created without specifying a zone are allocated from the default zone.
+ allocWithZone:
(NSObject
class)NSObject.h
© 2008 Apple Inc. All Rights Reserved. (Last updated: 2008-12-22)