Courses — About Objects, Inc.
Objective-C Programming
Course Outline
-
Objective-C Fundamentals
- Overview
- Historical Background
- Language Features
- Gnu Compiler Support
- Cocoa Ecosystem
- Extensions to ANSI C
- Keywords
- Message Expressions
- Defined Types
- Preprocessor Directives
- Compiler Directives
- Class and Method Definitions
- Objective-C 2.0 Garbage Collection
- Objects in Objective-C
- What is an Object?
- Objects and structs
- Memory allocation
- Classes in Objective-C
- What is a Class?
- Class Methods and Instance Methods
- Factory Methods
- Interface and Implementation Files
- Messages in Objective-C
- What is a Message?
- Message Expressions
- Message Arguments
- Method Invocation
- Writing Your First Application
- The Objective-C Compiler
- Command Line Invocation
- Working with XCode
- Debug Mode and Other Settings
- Overview
-
Understanding Objective-C
- Object-Oriented Design Techniques
- Encapsulation
- Inheritance
- Polymorphism
- The
id datatype
- Dynamic Binding vs. Dynamic Typing
- nil Values
- Memory Allocation
- The isa Pointer
- The alloc and copy Methods
- Object Initialization
- init and init... Methods
- The Runtime System
- The Messaging Function: objc_msgSend
- Messages to nil
- Hidden Arguments: self and _cmd
- Selectors
- Superclass Chaining
- Dispatch Tables
- Varying Messages at Runtime: performSelector:
- Runtime Checking: respondsToSelector:
- The NSClassFromString Function
- Properties
- What is a Property?
- Accessor Methods
- The @property Directive
- Alternate Syntax
- Key-Value Coding
- Accessing Property Values: valueForKey:
- Modifying Property Values: setValue:forKey:
- Working with Key Paths
- Object-Oriented Design Techniques
-
Memory Management
- The Reference Counting System
- retain and release
- Run Loops and Autorelease Pools
- When to Retain an Object
- Implementing dealloc
- Pitfalls of Reference Counting
- Relying on Convention
- Retain Loops
- Debugging Issues
- Garbage Collection
- Activating the Garbage Collector
- Understanding GC Generations
- When Not to Use Garbage Collection
- Exception Handling
- Exception Handling Domains
- NS_DURING, NS_HANDLER, and NS_ENDHANDLER
- @try, @catch, and @finally
- Memory Management Implications
- Throwing Exceptions
- The Reference Counting System
-
Foundation Framework
- Cocoa Design Techniques
- Delegation
- Class Clusters
- Design Pattern
- Factory Methods
- Subclasses
- Protocol
- Assertions and Logging
- Mutable and Immutable Classes
- Why the Distinction?
- When to Use Mutable vs. Immutable
- Using copy and mutableCopy
- NSString
- Basics
- Splitting and Combining
- Working with Ranges
- Working with Paths
- NSNumber
- Storage Inherited from NSValue
- NSDecimal Functions
- NSArray
- Factory Methods
- Accessing Elements
- Iterating with NSEnumerator
- Sorting
- Filtering
- Sending Messages to Elements
- Observing Changes
- NSDictionary
- Creating and Initializing
- Accessing Keys and Values
- Enumerating Keys and Values
- File Attributes
- Storing and Retrieving
- NSDate and NSCalendarDate
- Calendar Format
- Working with Time Intervals
- Calendar Calculations
- Cocoa Design Techniques
-
Files and I/O
- Locating Files and Directories with NSBundle
- Locating the Application Root
- Finding Application Resources
- Localization Support
- File Path Functions
- NSHomeDirectory
- NSSearchPathForDirectories InDomains
- NSRunLoop
- The Main Run Loop
- Creating and Running
- Scheduling Messages with performSelector: target:argument:modes:
- Canceling Messages with cancelPerformSelector: target:argument
- Setting Timers
- Working with NSStream
- Initializing a Stream
- Scheduling in Threaded Contexts
- Handling Stream Events
- Cleaning Up Streams
- Reading from an NSInputStream
- Writing to an NSOutputStream
- Working with Sockets
- Setting Up the Connection
- Using the HTTP Protocol
- Locating Files and Directories with NSBundle
-
Advanced Topics
- Introspection
- Introspection Methods in NSObject
- Overriding hash and isEqual:
- Categories
- Adding Methods to an Existing Class
- Using to Organize a Codebase
- Using to Add Convenience Methods
- Using to Patch Third-Party Libraries
- Forwarding
- Forwarding a Message
- Overriding forwardInvocation
- When to Override respondsToSelector:
- Comparison with Multiple Inheritance
- Proxies and Distributed Objects
- Delaying Method Invocation
- performSelector:withObject: afterDelay:
- Serialization
- The NSCoding Protocol
- Encoding and Decoding
- Creating an Archive with NSArchiver
- Performing Substitutions During Decoding
- Initializing Decoded Objects with awakeAfterUsingCoder:
- Root Objects
- NSObject
- Proxies and Faults
- Creating Your Own Root Class
- Dynamic Loading
- Key-Value Observing
- isa Swizzling
- Posting Notifications: willChangeValueForKey: and didChangeValueForKey:
- Registering an Observer
- Class Descriptions
- Implementing NSClassDescription
- Describing Attributes
- Describing Relationships
- Registering Class Descriptions
- Event-Driven Systems
- Messages versus Function Calls
- Cocoa's Target-Action Paradigm
- Introspection





