A quick reference cheat sheet for iOS developers so that you turn coffee into code much faster:)
Note: The Avocarrot team will do its best to keep this cheatsheet updated but feel free to send your pull requests if you want to add a new entry or edit something.
##Contents
###Objective-C Basics
###Foundation Framework Classes
###C Related Code
##Objective-C Basics
###Classes
####Class header
@interface Human : NSObject
// Define properties and methods
@end####Class implementation
#import "Human.h"
@interface Human ()
// Define private properties and methods
@end
@implementation Human {
// Define private instance variables
}
// Provide method implementation code
@end####Creating an instance
Human * anObject = [[Human alloc] init];###Methods
####Defining methods
// Returns nothing and has no arguments
- (void)foo;
// Returns an NSString object and takes one argument of type NSObject
- (NSString *)fooWithArgument:(NSObject *)bar;
// Takes two arguments one of type NSObject and a second one of type NSString
- (void)fooWithArgument:(NSObject *)bar andArgument:(NSString *)baz;
// Defines a class method (note the + sign)
+ (void)aClassMethod;####Implementing methods
- (NSString *)fooWithArgument:(NSObject *)bar{
    // Do something here
    return retValue;
}####Calling a method
[anObject someMethod];
[anObject someMethodWithArg1:arg1 andArg2:arg2];| Operator | Description | 
|---|
- | Addition
 
- | Subtraction
 
- | Multiplication / | Division % | Modulo
 
| Operator | Description | 
|---|---|
| x == y | Returns true if x is equal to y | 
| x > y | Returns true if x is greater than y | 
| x >= y | Returns true if x is greater than or equal to y | 
| x < y | Returns true if x is less than y | 
| x <= y | Returns true if x is less than or equal to y | 
| x != y | Returns true if x is not equal to y | 
| Operator | Description | 
|---|---|
| ! | NOT | 
| && | Logical AND | 
| || | Logical OR | 
| Operator | Description | 
|---|---|
| x += y | Add x to y and place result in x | 
| x -= y | Subtract y from x and place result in x | 
| x *= y | Multiply x by y and place result in x | 
| x /= y | Divide x by y and place result in x | 
| x %= y | Perform Modulo on x and y and place result in x | 
| x &= y | Assign to x the result of logical AND operation on x and y | 
| x | = y | 
| x ^= y | Assign to x the result of logical Exclusive OR on x and y | 
| Operator | Description | 
|---|---|
| & | Bitwise AND | 
| | | Bitwise Inclusive OR | 
| ^ | Exclusive OR | 
| ~ | Bit inversion | 
| << | Shift Left | 
| Shift Right
| Operator | Description | 
|---|---|
| () | Cast | 
| ? : | Ternary | 
| & | Memory Address | 
- | Pointer
 
###Properties
####Define properties
@property (attribute1, attribute2) NSString *aProperty;| Attribute Type | Purpose | 
|---|---|
| strong (iOS 4 = retain) (default) | Creates an owning relationship to the object that is assigned to the property | 
| weak (iOS 4 = unsafe_unretained) | Creates a non-owning relationship | 
| assign (default) | Normal assign, doesn’t perform any kind of memory-management | 
| copy | Make an immutable copy of the object upon assignment | 
| atomic (default) | Only allows one thread to access the property, which makes it threadsafe | 
| nonatomic | Allows multiple threads to access the property simultaneously, which makes it not threadsafe | 
| readwrite (default) | Generates both getter and setter | 
| readonly | Generates only getter | 
| getter=method | Use this to specify a different name for the property's getter method | 
| setter=method | Use this to specify a different name for the property's setter method | 
####Access Properties
[anObject aProperty];
// Alternative
anObject.aProperty###Constants
####Preprocessing Macros
This is not an actual constant because it defines a macro which replaces all occurrences of MAX_NUMBER_OF_ITEMS with the actual value before compile time.
#define MAX_NUMBER_OF_ITEMS 10####Using const
A better approach is to use const.
NSString *const kMyName = @"Clark";####Static and extern
If you know that the constant will only be available within it's implementation file, then you can use static. Using static means that the constant will only be available in that file.
static NSString * const kMyName = @"Clark";If you want to have a constant global then you should use extern.
// .h file
extern NSString * const kMyName;// .m file
NSString * const kMyName = @"Clark";###Flow control statements
####If-else statement
if (someCondition) {
    // Execute if the condition is true
} else if (someOtherCondition) {
    // Execute if the other condition is true
} else {
    // Execute if the none of the above conditions are true
}####Ternary operator
someCondition ? @"True" : @"False";####For Loops
for (int i = 0; i < totalCount; i++) {
    // Do something here
}####While Loop
while (someCondition) {
   // Do something here
}####Do While Loop
do {
    // Do something here
} while (someCondition);####Switch
switch (aLabel)
{
    case kLabelA:
        // Execute this if matched
        break;
     case kLabelB:
        // Execute this if matched
        break;
     default:
        // Execute this if matched
        break;
}###Delegates
Delegates are a design pattern. A delegate allows one object to send messages to another object when an event happens. Check out [Apple docs](https:// developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html):
####Become the delegate of a framework class
Step 1
Declare that your class adopts the protocol in the class definition in the angled brackets after the class/superclass name.
// MyTableViewController.h
@interface MyTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@endStep 2
Set your object as the delegate.
// MyTableViewController.m
[tableView setDelegate:self];
@endStep 3
Implement the delegate methods.
####Implement your own delegate for a custom class
Step 1
Declare the protocol methods
// Superman.h
#import <Foundation/Foundation.h>
@protocol SupermanDelegate <NSObject>
- (void)dodgeBullet;
- (void)seeThroughThings;
- (void)fly;
@optional
- (void)eat;
@end
@interface Superman : NSObject
// Create a property for the delegate reference
@property (nonatomic, weak) id <SupermanDelegate> delegate;
// Define other methods and properties
@end
Step 2
Set the delegate object
// Superman.m
[self setDelegate:anObject];Step 3
Start sending delegate messages
// Superman.m
[self.delegate fly];For the delegate methods that are optional, it is wise to check if the delegate can respond to that method before firing.
if ([self.delegate respondsToSelector:@selector(eat)]) {
  [self.delegate eat];
}Blocks are a language-level feature added to C, Objective-C and C++, which allow you to create distinct segments of code that can be passed around to methods or functions as if they were values.
For more information see [Programming with Objective-C - Working with Blocks](https:// developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html)
To declare a block local variable:
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};
To declare a block property:
@property (nonatomic, copy) returnType (^blockName)(parameterTypes);
To accept a block as a method parameter:
- (void)aMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
To pass a block as an argument in a method call:
[someObject someMethodThatTakesABlock: ^returnType (parameters) {...}];
To define a block type:
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};##Class Specific
###NSString
####Quick examples
NSString *firstName = @"Clark";
NSString *lastName = @"Kent";
NSString *fullName = [NSString stringWithFormat:  @"My full name is %@ %@",  firstName, lastName];####NSString format specifier
| Specifier | Description | 
|---|---|
| %@ | Objective-C object | 
| %zd | NSInteger | 
| %lx, (long) | CFIndex | 
| %tu | NSUInteger | 
| %i | int | 
| %u | unsigned int | 
| %hi | short | 
| %hu | unsigned short | 
| %% | Literal % | 
###NSArray
####Quick examples
// Create an array
NSMutableArray *anArray = [@[@"Clark Kent", @"Lois Lane"] mutableCopy];
// Add new items
[anArray addObject:@"Lex Luthor"];
// Find array length
NSLog(@"Array has %d items", [anArray count]);
// Iterate over array items
for (NSString *person in anArray) {
 NSLog(@"Person: %@", person);
}
// Access item with index
NSString *superman = anArray[0];
// Remove Object @"Clark Kent"
[anArray removeObject:@"Clark Kent"];
// Remove the first Object
[anArray removeObjectAtIndex:0];###NSDictionary
####Quick examples
// Create a dictionary
NSMutableDictionary *person = [@{
                             @"firstname" : @"Clark",
                             @"lastname" : @"Kent",
                             @"age" : [NSNumber numberWithInt:35]
                             } mutableCopy];
// Access values
NSLog(@"Superman's first name is %@", person[@"firstname"]);
// or
NSLog(@"Superman's first name is %@", [person objectForKey:@"firstname"]);
// Find number of items in dictionary
[person count];
// Add an object to a dictionary
[person setObject:@"job" forKey:@"teacher"];
// Remove an object to a dictionary
[person removeObjectForKey:@"firstname"];##Objective-C Literals
Available from LLVM Compiler version 4.0 made available with Xcode 4.4
###Strings
NSString *string = @"This is a string.";###Numbers
NSNumber *number = @126;      // int          : Equal to [NSNumber numberWithInt:126];
NSNumber *number = @126u;     // unsigned int : Equal to [NSNumber numberWithUnsignedInt:126u];
NSNumber *number = @126l;     // long         : Equal to [NSNumber numberWithLong:126l];
NSNumber *number = @126.544f; // float        : Equal to [NSNumber numberWithFloat:126.544f]
NSNumber *number = @126.544;  // double       : Equal to [NSNumber numberWithDouble:126.544]
NSNumber *number = @YES;      // bool         : Equal to [NSNumber numberWithBool:YES]###Containers
NSArray *array = @[object1,object2,object3]; // Creating NSArray
Object *object2 = array[1]; // Accessing NSArray
mutableArray[1] = newObject; // Adding to NSMutableArray
NSDictionary *dictionary = @{ @"key1" : object1, @"key2" : object2, @"key3" : object3 }; // Creating NSDictionary
Object *object2 = dictionary[@"key2"]; // Accessing NSDictionary
mutableDictionary[@"name"] = @"Henry"; // Adding to NSMutableDictionary##C References
###Enumerated Types
####Apple's Examples
Each enumerate is given a corresponding integer value, so
typedef NS_ENUM(NSInteger, UIButtonType) {
   UIButtonTypeCustom,
   UIButtonTypeSystem,
   UIButtonTypeDetailDisclosure,
   UIButtonTypeInfoLight,
   UIButtonTypeInfoDark,
   UIButtonTypeContactAdd,
   UIButtonTypeRoundedRect
};is the same as
typedef NS_ENUM(NSInteger, UIButtonType) {
   UIButtonTypeCustom = 0,
   UIButtonTypeSystem = 1,
   UIButtonTypeDetailDisclosure = 2,
   UIButtonTypeInfoLight = 3,
   UIButtonTypeInfoDark = 4,
   UIButtonTypeContactAdd = 5,
   UIButtonTypeRoundedRect = 6
};Explicitly defining the first enumerate's value is not required and it will default to 0.
####Using an enumerated type
UIButton *button = [UIButton buttonWithType:UIButtonTypeInfoLight];Or create a variable to pass into the methods like so...
UIButtonType myButtonType = UIButtonTypeCustom;
UIButton *myButton = [UIButton buttonWithType:myButtonType];Because they are not objects, you must print enumerated types as integers
UIButtonType myButtonType = UIButtonTypeRoundedRect;
// Bad, will give you a warning and might even crash
NSLog(@"%@", myButtonType);
// Good, will properly print the value as an integer
NSLog(@"%d", myButtonType);