- Read Learning Objective-C: A Primer
- Read Learn Objective-C on the Mac ($)
- Read Beginning iOS 5 Development: Exploring the iOS SDK ($)
- Read The Objective-C Programming Language
- Read About Memory Management
- Read chapters 6 - 15, 17 - 19, 24, 28 - 30 of Cocoa Design Patterns ($)
- Read and hack on sample code
- Read the Mobile Human Interface Guidelines
You know everyday Objective-C and iOS development when you can:
- Use Xcode (and the built-in Interface Builder) to compile an iOS app.
- Describe and use ARC and MRC for memory mangement, as well as the rules of the retain/release/autorelease cycle.
- Use the basic data types (NSInteger, NSString), collection objects (NSArray, NSDictionary), and know when to use them instead of C primitives (int, char, etc).
- Understand the difference between using tne mutable (NSMutableArray, NSMutableDictionary, NSMutableString) and immutable objects in Objective-C, their advantaces and disavantages.
- Use the basic display and navigation elements (UIWindow, UIView, UINavigationBar, UIToolbar, etc).
- Implement a solution using an UITableView, with navigation and a custom UITableViewCell.
- Implement the various iOS controls (UISwitch, UILabel, UISegmentedControl, etc).
- Understand and implement the usage of iPad specific UI controls, UIPopoverController and UISplitView.
- Design and use basic design patterns like MVC, delegates, callbacks, and notifications.
- Use CoreLocation to get location coordinates.
- Access the cameras to take pictures or access pictures from the device's photo gallery.
- Implement network communications using AFNetworking or NSUrlConnection.
- Implement UX and design best practices as prescribed by Apple.
- Meet App Store submission requirements and submit an app.
You know advanced Objective-C & iOS Development when you can:
- Create and manage Core Data objects and schemas.
- Decide when to best use:
- A category vs subclassing.
- Implement animations using CoreAnimation and optimize drawing using CoreGraphics.
- Implement a multi-tasking environment free of race conditions (using appropriate locking techniques such as mutexes and semaphores, message passing, etc)
- Implement task driven concurrency using the Grand Central Dispatch (GCD) framework.
- Design and use APIs that prefer the use of closures instead of selectors and delegates.
- Create and use UIStoryboards to define and organize the application flow and transitions between screens.
- Debug memory leaks using NSZombieEnabled, Instruments, and other tools.
- Use CocoaPods to define your project's dependencies.
- Create an universal app that contains code for both the iPhone/iPod and iPad devices.