# #import <...>
snippet Imp
	#import <${1:Cocoa/Cocoa.h}>
# #import "..."
snippet imp
	#import "${1:`vim_snippets#Filename()`.h}"
# @selector(...)
snippet sel
	@selector(${1:method}:)
# @"..." string
snippet s
	@"${1}"
# Object
snippet o
	${1:NSObject} *${2:foo} = [${3:$1 alloc}]${4};
# NSLog(...)
snippet log
	NSLog(@"${1:%@}"${2});
# Class
snippet objc
	@interface ${1:`vim_snippets#Filename('', 'someClass')`} : ${2:NSObject}
	{
	}
	@end

	@implementation $1
	${0}
	@end
# Class Interface
snippet int
	@interface ${1:`vim_snippets#Filename('', 'someClass')`} : ${2:NSObject}
	{${3}
	}
	${0}
	@end
snippet @interface
	@interface ${1:`vim_snippets#Filename('', 'someClass')`} : ${2:NSObject}
	{${3}
	}
	${0}
	@end
# Class Implementation
snippet impl
	@implementation ${1:`vim_snippets#Filename('', 'someClass')`}
	${0}
	@end
snippet @implementation
	@implementation ${1:`vim_snippets#Filename('', 'someClass')`}
	${0}
	@end
# Protocol
snippet pro
	@protocol ${1:`vim_snippets#Filename('$1Delegate', 'MyProtocol')`} ${2:<NSObject>}
	${0}
	@end
snippet @protocol
	@protocol ${1:`vim_snippets#Filename('$1Delegate', 'MyProtocol')`} ${2:<NSObject>}
	${0}
	@end
# init Definition
snippet init
	- (id)init
	{
		if (self = [super init]) {
			${0}
		}
		return self;
	}
# dealloc Definition
snippet dealloc
	- (void) dealloc
	{
		${0:deallocations}
		[super dealloc];
	}
snippet su
	[super ${1:init}]
snippet ibo
	IBOutlet ${1:NSSomeClass} *${2:$1};
# Category
snippet cat
	@interface ${1:NSObject} (${2:MyCategory})
	@end

	@implementation $1 ($2)
	${0}
	@end
# Category Interface
snippet cath
	@interface ${1:`vim_snippets#Filename('$1', 'NSObject')`} (${2:MyCategory})
	${0}
	@end
# Method
snippet m
	- (${1:id})${2:method}
	{
		${0}
	}
# Method declaration
snippet md
	- (${1:id})${2:method};
# IBAction declaration
snippet ibad
	- (IBAction)${1:method}:(${2:id})sender;
# IBAction method
snippet iba
	- (IBAction)${1:method}:(${2:id})sender
	{
		${0}
	}
# awakeFromNib method
snippet wake
	- (void)awakeFromNib
	{
		${0}
	}
# Class Method
snippet M
	+ (${1:id})${2:method}
	{
		${0:return nil;}
	}
# Sub-method (Call super)
snippet sm
	- (${1:id})${2:method}
	{
		[super $2];${0}
		return self;
	}
# Accessor Methods For:
# Object
snippet objacc
	- (${1:id})${2:thing}
	{
		return $2;
	}

	- (void)set$2:($1)${3:new$2}
	{
		[$3 retain];
		[$2 release];
		$2 = $3;
	}
# for (object in array)
snippet forin
	for (${1:Class} *${2:some$1} in ${3:array}) {
		${0}
	}
snippet fore
	for (${1:object} in ${2:array}) {
		${0:statements}
	}
snippet forarray
	unsigned int ${1:object}Count = [${2:array} count];

	for (unsigned int index = 0; index < $1Count; index++) {
		${3:id} $1 = [$2 $1AtIndex:index];
		${0}
	}
snippet fora
	unsigned int ${1:object}Count = [${2:array} count];

	for (unsigned int index = 0; index < $1Count; index++) {
		${3:id} $1 = [$2 $1AtIndex:index];
		${0}
	}
# Try / Catch Block
snippet	@try
	@try {
		${1:statements}
	}
	@catch (NSException * e) {
		${2:handler}
	}
	@finally {
		${0:statements}
	}
snippet @catch
	@catch (${1:exception}) {
		${0:handler}
	}
snippet @finally
	@finally {
		${0:statements}
	}
# IBOutlet
# @property (Objective-C 2.0)
snippet prop
	@property (${1:retain}) ${2:NSSomeClass} ${3:*$2};
# @synthesize (Objective-C 2.0)
snippet syn
	@synthesize ${1:property};
# [[ alloc] init]
snippet alloc
	[[${1:foo} alloc] init${2}];
snippet a
	[[${1:foo} alloc] init${2}];
# retain
snippet ret
	[${1:foo} retain];
# release
snippet rel
	[${0:foo} release];
# autorelease
snippet arel
	[${0:foo} autorelease];
# autorelease pool
snippet pool
	NSAutoreleasePool *${1:pool} = [[NSAutoreleasePool alloc] init];
	${0}
	[$1 drain];
# Throw an exception
snippet except
	NSException *${1:badness};
	$1 = [NSException exceptionWithName:@"${2:$1Name}"
	                             reason:@"${0}"
	                           userInfo:nil];
	[$1 raise];
snippet prag
	#pragma mark ${0:-}
snippet cl
	@class ${1:Foo};
snippet color
	[[NSColor ${0:blackColor}] set];
# NSArray
snippet array
	NSMutableArray *${1:array} = [NSMutable array];
snippet nsa
	NSArray ${0}
snippet nsma
	NSMutableArray ${0}
snippet aa
	NSArray * array;
snippet ma
	NSMutableArray * array;
# NSDictionary
snippet dict
	NSMutableDictionary *${1:dict} = [NSMutableDictionary dictionary];
snippet nsd
	NSDictionary ${0}
snippet nsmd
	NSMutableDictionary ${0}
# NSString
snippet nss
	NSString ${0}
snippet nsms
	NSMutableString ${0}