Professional Documents
Culture Documents
Objective-C Guide
Objective-C Guide
■
■
.m
.c
.mm
@interface ( )
@interface
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
...
}
■
id
id
isa
isa isa
id
id anObject;
id int
int
nil id 0 id nil
objc/objc.h
id
id
isa
isa
isa
■
[receiver message]
myRectangle display
[myRectangle display];
[myRectangle setWidth:20.0];
myRectangle
setOrigin::
setOriginX:y:
makeGroup:
isFilled
YES myRectangle NO
BOOL isFilled;
isFilled = [myRectangle isFilled];
nil
nil
■ nil 0 nil
■ sizeof(void*)
float double long double long long nil 0
■
nil 0.0
■
nil
nil
id anObjectMaybeNil = nil;
// this is valid
if ([anObjectMaybeNil methodThatReturnsADouble] == 0.0)
{
// implementation continues...
}
nil
void sizeof(void*)
nil nil nil
nil
sizeof(void*)
primaryColor
otherRect
primaryColor isFilled
display
display id display
copy
copy
.
[]
myInstance.value = 10;
printf("myInstance value: %d", myInstance.value);
[myInstance setValue:10];
printf("myInstance value: %d", [myInstance value]);
if (graphic.textHidden != YES) {
graphic.text = @"Hello";
}
graphic.bounds = NSMakeRect(10.0, 10.0, 20.0, 120.0);
@"Hello" NSString
set :
set :
NSMutableData
id y;
x = y.z; // z is an undeclared property
y z
z
z
z BOOL
readonly
nil
nil
self self
self.age = 10;
self.
age
age = 10;
aVariable = anObject.aProperty;
aProperty aVariable
aProperty aVariable
xOrigin = aView.bounds.origin.x;
11 anObject.integerProperty anotherObject.floatProperty
setIntegerProperty:
setFloatProperty:
anObject.retain;
/* method declaration */
- (BOOL) setFooIfYouCan: (MyClass *)newFoo;
/* code fragment */
anObject.fooIfYouCan = myInstance;
setFooIfYouCan:
(void)
flag = aView.lockFocusIfCanDraw;
lockFocusIfCanDraw flag
flag
/* property declaration */
@property(readonly) NSInteger readonlyProperty;
/* method declaration */
- (void) setReadonlyProperty: (NSInteger)newValue;
/* code fragment */
self.readonlyProperty = 5;
NSObject
Graphic
Image Text
Shape
Square
NSObject
NSObject
NSObject
NSObject
NSObject
NSObject
NSObject
NSObject
NSObject
NSObject
NSObject NSObject
isa NSObject
isa
display
display
display
NSObject
NSObject
NSView
sizeof
int i = sizeof(Rectangle);
id
Rectangle *myRectangle;
id
id
id
Graphic *myRectangle;
myRectangle
isMemberOfClass: NSObject
if ( [anObject isMemberOfClass:someClass] )
...
isKindOfClass: NSObject
if ( [anObject isKindOfClass:someClass] )
...
isKindOfClass: YES
NSObject isKindOfClass:
isMemberOfClass:
NSObject
id class
id
myRectangle
id myRectangle;
myRectangle = [Rectangle alloc];
alloc
0 isa
init
myRectangle
alloc
init
alloc init
initWithPosition:size:
NSMatrix
NSCell
NSMatrix
NSMatrix
NSCell
NSCell
NSObject
NSCell
NSBrowserCell NSActionCell
NSMenuCell
NSCell NSButtonCell
NSTextFieldCell
NSCell NSMatrix
NSMatrix
NSMatrix
NSMatrix
NSCell NSMatrix
NSCell NSMatrix
NSMatrix
NSMatrix NSMatrix
NSCell setCellClass:
NSCell NSMatrix
NSMatrix
int MCLSGlobalVariable;
@implementation MyClass
// implementation continues
static
static
@implementation MyClass
+ (MyClass *)sharedInstance
{
// check for existence of shared instance
// create if necessary
return MCLSSharedInstance;
}
// implementation continues
static
initialize
initialize
initialize
initialize
initialize
initialize initialize
initialize
initialize
initialize
initialize initialize
initialize
initialize
+ (void)initialize
{
if (self == [ThisClass class]) {
// Perform initialization here.
...
}
}
initialize
initialize initialize
NSObject
NSObject
NSObject
■
Rectangle *anObject;
anObject
id class
isKindOfClass:
NSClassFromString
NSString *className;
...
if ( [anObject isKindOfClass:NSClassFromString(className)] )
...
nil
class
class
.m
.h Rectangle.h
Rectangle.m
@interface
@end
float width;
float height;
BOOL filled;
NSColor *fillColor;
+ alloc;
- (void)display;
radius
radius
- (float)radius;
- (void)setRadius:(float)aRadius;
id alloc id
- (void)setWidth:(float)width height:(float)height;
- makeGroup:group, ...;
#import
#import "Rectangle.h"
#include
#include
#import "ItsSuperclass.h"
NSObject
@class
- (void)setPrimaryColor:(NSColor *)aColor;
NSColor
@class
@class
@class
@implementation
@end
Rectangle.m
Rectangle.h
■
#import "ClassName.h"
@implementation ClassName
method definitions
@end
+ (id)alloc
{
...
}
- (BOOL)isFilled
{
...
}
- (void)setFilled:(BOOL)flag
{
...
}
#import <stdarg.h>
...
- getGroup:group, ...
{
va_list ap;
va_start(ap, group);
...
}
. ->
filled
- (void)setFilled:(BOOL)flag
{
filled = flag;
...
}
filled
->
twin
twin
- makeIdenticalTwin
{
if ( !twin ) {
twin = [[Sibling alloc] init];
twin->gender = gender;
twin->appearance = appearance;
}
return twin;
}
- (BOOL)isFilled
{
return filled;
}
@private
@protected
@public
@private
@protected @public
@protected
A class that
inherits the @public
instance variable
Unrelated code
name @protected
job
- promoteTo:newPosition
{
id old = job;
job = newPosition;
return old;
}
promoteTo:
job
@private
@private
@public
@public
self super
reposition
setOrigin::
setOrigin:: reposition
self super reposition
- reposition
{
...
[self setOrigin:someX :someY];
...
}
- reposition
{
...
[super setOrigin:someX :someY];
...
}
super self
■ self
■ super
super
super
objc_msgSend
super
self super
negotiate
makeLastingPeace negotiate
superclass
High – negotiate
superclass
Mid – negotiate
– makeLastingPeace
superclass
Low – negotiate
makeLastingPeace
makeLastingPeace negotiate
self
- makeLastingPeace
{
[self negotiate];
...
}
negotiate self
super
- makeLastingPeace
{
[super negotiate];
...
}
negotiate
makeLastingPeace
negotiate
super
makeLastingPeace negotiate
negotiate
■ negotiate
■ super makeLastingPeace
negotiate
negotiate
negotiate
super
- negotiate
{
...
return [super negotiate];
}
super init
init
init super
init
- (id)init
{
if (self = [super init]) {
...
}
}
super
isa
alloc allocWithZone: NSObject
super
super
self
self
self super
self
self
self
+ (id)rectangleOfColor:(NSColor *)color
{
id newInstance = [[Rectangle alloc] init]; // GOOD
[newInstance setColor:color];
return [newInstance autorelease];
}
alloc alloc
self rectangleOfColor:
array NSArray
NSMutableArray
+ (id)rectangleOfColor:(NSColor *)color
{
id newInstance = [[self alloc] init]; // EXCELLENT
[newInstance setColor:color];
return [newInstance autorelease];
}
■
NSObject
NSObject alloc allocWithZone:
init
NSView
initWithFrame:
init... NSObject
isa init isa
NSObject init self NSObject
init...
initWithName:
initWithName:
init...
initFromFile:
init... nil
init...
nil
alloc allocWithZone: init
init... nil
isa
0
■ init
initWithFormat: initWithObjects:
initWithObjectsAndKeys:
■ id
id
NSString
initWithFormat: NSMutableString
NSString NSMutableString NSString
NSObject init
■ self
■ self
nil
NSObject creationDate
- (id)init {
// Assign self to value returned by super's designated initializer
// Designated initializer for NSObject is init
if (self = [super init]) {
creationDate = [[NSDate alloc] init];
}
return self;
}
initWithName:fromURL:
- (id)initWithImage:(NSImage *)anImage {
// Find the size for the new instance from the image
NSSize size = anImage.size;
NSRect frame = NSMakeRect(0.0, 0.0, size.width, size.height);
[self release]
nil
■ nil
■ dealloc
- (id)init {
if (self = [super init]) {
creationDate = [[NSDate alloc] init];
}
return self;
}
- (id)initWithImage:(NSImage *)anImage {
if (anImage == nil) {
[self release];
return nil;
}
// Find the size for the new instance from the image
NSSize size = anImage.size;
NSRect frame = NSMakeRect(0.0, 0.0, size.width, size.height);
NSError
if (data == nil) {
// In this case the error object is created in the NSData initializer
[self release];
return nil;
}
// implementation continues...
init...
super
- (id)initWithName:(NSString *)string {
if ( self = [super init] ) {
name = [string copy];
}
return self;
}
super
NSObject
initWithName: init
– init
Class A
Class B – initWithName:
init initWithName:
init
init initWithName:
- init {
return [self initWithName:"default"];
}
initWithName:
init
– init
Class A
– init
Class B – initWithName:
initWithName:
super
initWithName:fromFile:
init initWithName:
initWithName: initWithName:fromFile:
- initWithName:(char *)string {
return [self initWithName:string fromFile:NULL];
}
init initWithName:
initWithName:fromFile:
– init
Class B – initWithName:
Class C – initWithName:
– initWithName:fromFile:
initWithName:fromFile:
super
init initWithName: init
■ initWithName:
initWithName:fromFile: initWithName:
super
super
self
self
super
– init
Class A
– init
Class B – initWithName:
Class C – initWithName:
– initWithName:fromFile:
+ NSString
NSArray
+ (id)array;
+ (id)arrayWithObject:(id)anObject;
+ (id)arrayWithObjects:(id)firstObj, ...;
id
listFromFile:
init...
initWithName:
init...
soloist
+ (Soloist *)soloist {
static Soloist *instance = nil;
if ( instance == nil ) {
instance = [[self alloc] init];
}
return instance;
}
Soloist *
■
- (void)mouseDown:(NSEvent *)theEvent;
- (void)mouseDragged:(NSEvent *)theEvent;
- (void)mouseUp:(NSEvent *)theEvent;
helpOut: assistant
- setAssistant:anObject
{
assistant = anObject;
}
assistant
- (BOOL)doWork
{
...
if ( [assistant respondsToSelector:@selector(helpOut:)] ) {
[assistant helpOut:self];
return YES;
}
return NO;
}
assistant helpOut:
■
■
- (NSXMLElement *)XMLRepresentation;
- initFromXMLRepresentation:(NSXMLElement *)xmlString;
NSMatrix
NSCell
NSCell NSMatrix
NSMatrix
NSMatrix
@protocol
@protocol ProtocolName
method declarations
@end
@protocol MyXMLSupport
- initFromXMLRepresentation:(NSXMLElement *)XMLElement;
- (NSXMLElement *)XMLRepresentation;
@end
@optional @optional
@required
@optional @required
@required
@protocol MyProtocol
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end
NSObject
NSObject
@protocol()
@protocol()
■ @protocol()
conformsToProtocol:
if ( ! [receiver conformsToProtocol:@protocol(MyXMLSupport)] ) {
// Object does not conform to MyXMLSupport protocol
// If you are expecting receiver to implement methods declared in the
// MyXMLSupport protocol, this is probably an error
}
conformsToProtocol:
conformsToProtocol: respondsToSelector:
conformsToProtocol: respondsToSelector:
conformsToProtocol: isKindOfClass:
- (id <Formatting>)formattingService;
id <MyXMLSupport> anObject;
Formatter *anObject;
id <Formatting> anObject;
conformsToProtocol:
id <Paging> someObject;
conformsToProtocol:
if ( [anotherObject conformsToProtocol:@protocol(Paging)] )
...
■
NSObject
#import "B.h"
@protocol A
- foo:(id <B>)anObject;
@end
#import "A.h"
@protocol B
- bar:(id <A>)anObject;
@end
@protocol
@protocol B;
@protocol A
- foo:(id <B>)anObject;
@end
@protocol
■
@property @property
@interface @property
@property(attributes) type name;
@property
- (float)value;
- (void)setValue:(float)newValue;
@property(attribute [, attribute2,
...])
@synthesize
copy
set : foo
setFoo:
readonly setter=
getter=getterName
setter=setterName
void
readonly setter=
getter
is
readwrite
@implementation @synthesize
readonly
readonly @implementation
@synthesize
assign
NSInteger CGRect
retain assign
retain
retain assign
release
retain
copy
assign
release
copy
NSCopying
■ assign
retain copy
■
assign retain copy NSCopying
nonatomic
nonatomic
nonatomic
__attribute__
@property CGFloat x
AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4;
@property CGFloat y __attribute__((...));
IBOutlet
IBOutlet
__weak __strong
@property (nonatomic, retain) __weak Link *parent;
@synthesize @dynamic
readonly
@synthesize
@synthesize
@implementation
@implementation MyClass
@synthesize value;
@end
property=ivar
@synthesize
■ @interface
■
@dynamic
@dynamic
- (NSString *)value {
return value;
}
- (void)setValue:(NSString *)newValue {
if (newValue != value) {
value = [newValue copy];
}
}
@end
readonly readwrite
readonly readwrite
@synthesize
NSString
NSArray NSDictionary readonly
readwrite
@implementation MyObject
@synthesize language;
@end
copy
copy
NSMutableString
-(void)setString:(NSString *)newString {
if (string != newString) {
[string release];
string = [newString copy];
}
}
copy
@implementation MyClass
@synthesize myArray;
- (void)setMyArray:(NSMutableArray *)newArray {
if (myArray != newArray) {
[myArray release];
myArray = [newArray mutableCopy];
}
}
@end
dealloc
dealloc
assign
assign
dealloc
nil
- (void)dealloc {
[property release];
[super dealloc];
}
- (void)dealloc {
[self setProperty:nil];
[super dealloc];
}
retain
@implementation MyClass
@synthesize myImage;
@end
__strong
...
__strong CGImageRef myImage;
...
@property CGImageRef myImage;
■ next
■ next
■ creationTimestamp next
■ name
■ gratuitousFloat dynamic
■ nameAndAge dynamic
nameAndAgeAsString
@protocol Link
@property id <Link> next;
@end
@end
@implementation MyClass
@dynamic gratuitousFloat;
// This directive is not strictly necessary.
- (CGFloat)gratuitousFloat {
return gratuitousFloat;
}
- (void)setGratuitousFloat:(CGFloat)aValue {
gratuitousFloat = aValue;
}
- (NSString *)nameAndAgeAsString {
return [NSString stringWithFormat:@"%@ (%fs)", [self name],
[NSDate timeIntervalSinceReferenceDate] -
intervalSinceReferenceDate];
}
- (id)init {
if (self = [super init]) {
intervalSinceReferenceDate = [NSDate timeIntervalSinceReferenceDate];
}
return self;
}
- (void)dealloc {
[nextLink release];
[name release];
[super dealloc];
}
@end
readonly MyInteger
readonly value
@implementation MyInteger
@synthesize value;
@end
MyMutableInteger
@implementation MyMutableInteger
@dynamic value;
- (void)setValue:(NSInteger)newX {
value = newX;
}
@end
retain
assign copy nonatomic
// assign
property = newValue;
// retain
if (property != newValue) {
[property release];
property = [newValue retain];
}
// copy
if (property != newValue) {
[property release];
property = [newValue copy];
}
nonatomic
@synthesize
@synthesize
@implementation MyClass
@synthesize sameName;
@synthesize differentName=otherName;
@synthesize noDeclaredIvar;
@end
@synthesize noDeclaredIvar;
noDeclaredIvar
@interface
NSArray
NSArray
NSArray NSArray
#import "ClassName.h"
ClassName+CategoryName.m
#import "ClassName+CategoryName.h"
NSArray
■
super
■
■
windowWillClose: NSObject
NSWindow
NSObject
■ super
NSObject
self
NSObject
@implementation
@implementation MyObject
- (NSNumber *)number {
return number;
}
@end
setNumber:
@interface
@interface MyObject ()
- (void)setNumber:(NSNumber *)newNumber;
@end
@implementation MyObject
- (NSNumber *)number {
return number;
}
- (void)setNumber:(NSNumber *)newNumber {
number = newNumber;
}
@end
■ @interface
■ setNumber: @implementation
setNumber: @implementation
setNumber:
objc_setAssociatedObject
■ void
static
objc_AssociationPolicy
[overview release];
// (1) overview valid
[array release];
// (2) overview invalid
overview OBJC_ASSOCIATION_RETAIN
overview
overview
objc_getAssociatedObject
objc_setAssociatedObject nil
overview
nil
objc_removeAssociatedObjects
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
[pool drain];
return 0;
}
for ( Type newVariable in expression ) { statements }
Type existingItem;
for ( existingItem in expression ) { statements }
NSFastEnumeration
statements nil
■ NSEnumerator
NSFastEnumeration
NSArray NSDictionary NSSet
NSEnumerator NSArray NSSet
NSDictionary NSManagedObjectModel
NSDictionary NSManagedObjectModel
NSArray NSDictionary
NSString *key;
for (key in dictionary) {
NSLog(@"English: %@, Latin: %@", key, [dictionary valueForKey:key]);
}
NSEnumerator
NSArray NSEnumerator
for break
if (++index >= 6) {
break;
}
}
■
■ id
id
id
id
id
Rectangle *thisObject;
thisObject
id
id
id
display
thisObject
[thisObject display];
id
Shape *aShape;
Rectangle *aRect;
aRect aShape
aShape aRect
id
id id alloc
init id
Rectangle *aRect;
aRect = [[Shape alloc] init];
NSObject
isFilled
[myRectangle display];
worry double
- (double)worry;
- (int)worry;
worry
double worry int
SEL
0 SEL
@selector()
setWidth:height: setWidthHeight
SEL setWidthHeight;
setWidthHeight = @selector(setWidth:height:);
SEL @selector()
NSSelectorFromString
setWidthHeight = NSSelectorFromString(aBuffer);
NSStringFromSelector
NSString *method;
method = NSStringFromSelector(setWidthHeight);
display
display
display
display
performSelector: performSelector:withObject:
performSelector:withObject:withObject: NSObject SEL
[friend performSelector:@selector(gossipAbout:)
withObject:aNeighbor];
[friend gossipAbout:aNeighbor];
id helper = getTheReceiver();
SEL request = getTheSelector();
[helper performSelector:request];
helper getTheReceiver
request
getTheSelector
performSelector: id
NSControl
NSButtonCell NSMatrix
NSButtonCell
NSButtonCell
NSButtonCell
[myButtonCell setAction:@selector(reapTheWind:)];
[myButtonCell setTarget:anObject];
NSObject performSelector:withObject:
id
NSButtonCell
NSButtonCell
respondsToSelector: NSObject
if ( [anObject respondsToSelector:@selector(setOrigin::)] )
[anObject setOrigin:0.0 :0.0];
else
fprintf(stderr, "%s can’t be placed\n",
[NSStringFromClass([anObject class]) UTF8String]);
respondsToSelector:
NSException NSError
-fobjc-exceptions
■ @try
■ @catch() @try
@catch()
■ @finally
■ @throw
NSException
@try {
[cup fill];
}
@catch (NSException *exception) {
NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);
}
@finally {
[cup release];
}
@try {
...
}
@catch (CustomException *ce) { // 1
...
}
@catch (NSException *ne) { // 2
// Perform processing necessary at this level.
...
}
@catch (id ue) {
...
}
@finally { // 3
// Perform processing necessary whether an exception occurred or not.
...
}
@catch() @throw
NSException
NSException
NSException
-fobjc-exceptions
@synchronized()
@synchronized()
@synchronized()
@synchronized() self
self
self
- (void)criticalMethod
{
@synchronized(self) {
// Critical code.
...
}
}
initialize
Account *account = [Account accountFromString:[accountField stringValue]];
@synchronized(accountSemaphore) {
// Critical code.
...
}
@synchronized()
@synchronized()
Proxy
A for B
B
conformsToProtocol: @protocol()
NSProxy NSConnection
oneway
in
out
inout
bycopy
byref
- (BOOL)canDance;
canDance
initial message
Proxy
A for B
B return information
oneway
- (oneway void)waltzAtWill;
oneway const
oneway float oneway id oneway void
- setTune:(struct tune *)aSong
{
tune = *aSong;
...
}
■ in
■ out
■ inout
inout
const in inout
in in out
inout
char *
out inout
- danceWith:(id)aPartner;
danceWith: id
aPartner
danceWith:
bycopy
- danceWith:(bycopy id)aClone;
bycopy
- (bycopy)dancer;
out
bycopy
byref
byref
bycopy byref
id
bycopy byref
foo
@Protocol foo
- (bycopy)array;
@end
foo
/* Hello.mm
* Compile with: g++ -x objective-c++ -framework Foundation Hello.mm -o hello
*/
#import <Foundation/Foundation.h>
class Hello {
private:
id greeting_text; // holds an NSString
public:
Hello() {
greeting_text = @"Hello, world!";
}
Hello(const char* initial_greeting_text) {
greeting_text = [[NSString alloc]
initWithUTF8String:initial_greeting_text];
}
void say_hello() {
printf("%s\n", [greeting_text UTF8String]);
}
};
@implementation Greeting
- (id)init {
if (self = [super init]) {
hello = new Hello();
}
return self;
}
- (void)dealloc {
delete hello;
[super dealloc];
}
- (void)sayGreeting {
hello->say_hello();
}
- (void)sayGreeting:(Hello*)greeting {
greeting->say_hello();
}
@end
int main() {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
delete hello;
[greeting release];
[pool release];
return 0;
}
__cplusplus __OBJC__
Bar *barPtr; // OK
@interface Foo {
struct CStruct { ... };
struct CStruct bigIvar; // OK
} ... @end
fobjc-call-cxx-cdtors
fobjc-call-cxx-cdtors
alloc class_createInstance
dealloc
object_dispose
#import <Cocoa/Cocoa.h>
self super
this this self super
oneway
in out inout bycopy
class
NSObject class
[foo class]; // OK
class
@interface
foo @interface(foo)
id<someProtocolName> foo;
TemplateType<SomeTypeName> bar;
id
label: ::global_name = 3;
this self
[receiver message]
■ self
■ super
objc/objc.h
id
Class
SEL
IMP id
BOOL YES NO
BOOL char
id
objc.h
nil (id)0
Nil (Class)0
NO (BOOL)0
YES (BOOL)1
#import #include
//
@interface
@implementation
@protocol
@end
@private
@protected
@public
@protected
@try
@throw
@catch() @try
@finally
@try
@property
@synthesize
@dynamic
@class
@selector(method_name)
@protocol(protocol_name)
@protocol
@encode(type_spec)
@"string" NSString
@"string1" @"string2" ... NSString
@"stringN"
@synchronized()
@interface
#import "ItsSuperclass.h"
#import "ClassName.h"
@implementation ClassName
method definitions
@end
#import "ClassName.h"
@protocol
@optional @required
@required
@protocol
@protocol ProtocolName;
@protocol()
oneway
in
out
inout
bycopy
byref
- (void)setWidth:(int)newWidth height:(int)newHeight
- (void)setWidthAndHeight:(int)newWidth :(int)newHeight
■ id int
unsigned unsigned int
■ self
■ _cmd
void
@interface SomeClass
-method __attribute__((deprecated));
@end
#include <AvailabilityMacros.h>
@interface SomeClass
-method DEPRECATED_ATTRIBUTE; // or some other deployment-target-specific macro
@end
.m
.h
■
initialize
conformsTo: conformsToProtocol:
id
Ivar objc_ivar_list
class_getInstanceMethod
class_getClassMethod
method_getArgumentInfo
NSData
NSView
@protocol
init...
self
init...
super
id
NSObject
NSObject
NSApplication
id
SEL
BOOL
bycopy
byref
//
@""
.c
_cmd
__cplusplus
__OBJC__
@catch()
alloc
allocWithZone:
Class
@class
self
@finally
.h
//
conformsToProtocol:
id
IMP
@implementation
#import
in
#include
#include #import
@encode()
@end
init
initialize
inout
super
@interface
.mm
isa
isKindOfClass:
isMemberOfClass:
Nil
nil
.m NO
NSClassFromString
NSSelectorFromString
NSStringFromSelector
oneway
out
performSelector:
performSelector:withObject:
performSelector:withObject:withObject: SEL
@selector()
self
@private
@protected
@protocol
super
@public
@synchronized()
this
@throw
@try
respondsToSelector:
unsigned int
void
YES