Objective-C
Full Objective-C course — 172 topics from the basics to advanced use.
Lessons
- What is C, and How Does Source Code Become a Running Program?
- C Variables: Declaring, Typing, Scoping, and Storing Data
- C Constants: const, #define, and enum
- C Operators: Arithmetic, Logic, Bits, and Precedence
- C Control Flow: Branching, Loops, and Jumps
- C Functions: Declarations, Pointers, and Variadic Arguments
- C Arrays: One-Dimensional, Multidimensional, and Decay
- C Strings: Null Termination, Standard Functions, and Buffer Safety
- C Pointers: Addresses, Dereferencing, Arithmetic, and the Road to Objective-C Objects
- C Structs: Grouping Related Data
- C Enums: Naming a Fixed Set of Values
- C typedef: Creating Type Aliases
- The C Preprocessor: Directives, Macros, and Conditional Compilation
- C Header Files: Declarations, Definitions, and Modular Code
- C Compilation and Linking: From Source Code to a Running Program
- What is Objective-C? History, Influences, and the Language Today
- Your First Objective-C Program: Reading Every Piece of Hello, SampleApp
- Objective-C File Types: .h, .m, .mm, and How Projects Mix C, C++, and Objective-C
- The Objective-C Syntax Mental Model: From Calling Functions to Sending Messages
- Objective-C Variables and Types: Object Pointers, id, Class, SEL, BOOL, and Cocoa's Portable Numeric Types
- Objective-C Class Anatomy: Reading a Complete Class, Line by Line
- @interface and @implementation: Splitting a Class into Public Contract and Private Body
- Creating Objects: alloc, init, and Why They're Always Chained
- Designated Initializers, Convenience Initializers, and Initializer Chaining
- Class Methods: The + Prefix, the Class Object, and Factory Methods
- Properties in Depth: Ownership, Atomicity, Access Control, and Synthesis
- Instance Variables: Backing Storage, Naming, Visibility, and Access Style
- Sending Messages: The Full Pipeline From Bracket Syntax to Executing Code
- Selectors: SEL, @selector, and Method Names as First-Class Values
- performSelector: Dynamic Invocation and Its Real Limitations
- Dynamic Messaging: Runtime Lookup, Optional Methods, and Existence Checks
- Methods: Instance vs. Class, Signatures, Named Parameters, and Selectors
- Inheritance: Subclassing, NSObject, super, and Composition vs. Inheritance
- What is a Protocol?
- Protocol-Oriented APIs
- Categories
- Class Extensions: Private Properties, Private Methods, and the Anonymous Category
- Blocks: Closures, Capture, Memory, and Asynchronous Callbacks
- Manual Reference Counting: retain, release, autorelease, and the Ownership Model
- ARC: Automatic Reference Counting, Ownership Qualifiers in Practice, and Bridging
- Ownership Qualifiers in Depth: __strong, __weak, __unsafe_unretained, __autoreleasing
- Retain Cycles: When Strong References Point at Each Other
- Autorelease Pools: Deferred Release and @autoreleasepool
- NSString: Foundation's Immutable String Class
- NSMutableString: Mutating Strings in Place
- NSNumber: Boxing Primitive Values into Objects
- NSValue: Boxing Arbitrary C Structs
- NSArray: Ordered, Immutable Collections
- NSMutableArray: Mutating Ordered Collections and Their Cost
- NSDictionary: Key-Value Storage, Lookup, and Generics
- NSMutableDictionary: Mutation, the Enumeration Crash, and Thread Safety
- NSSet and NSMutableSet: Unordered Uniqueness
- NSOrderedSet: Uniqueness With Order
- NSCountedSet: Counting Membership
- Foundation Collections and Modern Syntax: Bringing It Together
- Dates, Numbers, and Formatting: Getting Time and Locale Right
- Data and the File System: Bytes, Files, and Reliability
- URL and Networking: NSURLSession, Requests, and the HTTP Round Trip
- JSON and Serialization: NSJSONSerialization, Model Mapping, and Untrusted Data
- Error Handling: NSError, NSException, and Choosing the Right Tool
- Nullability Annotations: nullable, nonnull, and the Assume-Nonnull Regions
- Lightweight Generics: Typed Collections, Compile-Time Checking, and Runtime Erasure
- Objective-C Literals and Syntax Sugar: What Every Shortcut Really Expands To
- Key-Value Coding: Indirect Property Access by String Key
- Key-Value Observing: Automatic Change Notifications and Their Crash Risks
- NSNotificationCenter: Broadcast Messaging and Its Overuse Risks
- Delegation: The One-to-One Callback Pattern Behind UIKit and Cocoa
- Target-Action and Callback Patterns: Choosing the Right Tool for the Job
- The Objective-C Runtime
- Dynamic Method Resolution
- Message Forwarding: What Happens When a Message Send Fails
- Method Swizzling: Swapping Implementations at Runtime (Advanced / Specialized)
- Associated Objects: Attaching Extra State to an Existing Instance
- Runtime Introspection: Examining Classes and Objects at Runtime
- Blocks + Runtime + Memory: One Unified Mental Model
- Concurrency Fundamentals: Threads, GCD, and Queues
- Concurrency: Synchronization, Safety, and NSOperation
- Grand Central Dispatch in Practice
- NSOperation and NSOperationQueue
- Thread Safety: Protecting Shared Mutable State
- Foundation Threading Utilities
- Persistence: Choosing the Right Storage Tool
- UserDefaults in Depth
- Keychain: Secure Storage for Secrets
- SQLite: Calling a C Library Directly from Objective-C
- Core Data Fundamentals: Stack and Model
- Core Data: Change Tracking, Concurrency, and Migration
- Cocoa and Cocoa Touch: The Apple Object Ecosystem
- UI Development Concepts: How Objective-C Drives Apple's Interfaces
- The View Controller Lifecycle: From Creation to Deallocation
- Auto Layout: Constraints, Anchors, and Resolving Ambiguity
- UITableView and UICollectionView: Data Sources, Reuse, and Scroll Performance
- Core Animation, CALayer, and UIView Animations
- Accessibility: Building UI That Works for Everyone
- Network Security: Protecting Data in Transit
- App Security
- C Interoperability
- C++ / Objective-C++
- Swift Interoperability: How Objective-C and Swift Talk to Each Other
- Bridging Headers: Letting Swift See Your Objective-C Code
- Objective-C Generics and Swift: Why NSArray<NSString *> * Matters at the Boundary
- API Design for Swift: A Practical Checklist for Objective-C Headers That Import Cleanly
- Modules and Frameworks: How Objective-C Code Gets Packaged
- The Build System: From Source Files to a Runnable App
- Xcode: The IDE That Ties the Course Together
- LLDB Debugging: Commanding the Debugger Behind Xcode's UI
- Instruments: Measuring Before You Optimize
- Memory Debugging: A Troubleshooting Guide to Objective-C Memory Failures
- Testing: Test Types, XCTest, and Writing Tests That Actually Catch Bugs
- Mocking and Dependency Injection: Fakes, Stubs, Spies, Mocks, and Testable Design
- Architecture: Organizing an Objective-C App at the Structural Level
- Design Patterns: Creational and Structural
- Design Patterns: Behavioral and Cocoa-Specific
- Performance: Finding and Fixing Real Bottlenecks
- Production Reliability
- Legacy Objective-C
- Modernizing Legacy Objective-C
- Source Control and Code Quality
- Documentation
- Security Checklist
- Common Objective-C Errors: Compile-Time and Build Errors
- Common Objective-C Errors: Runtime Crashes and Exceptions
- Objective-C vs C vs C++ vs Swift: A Comparative Map
- The Objective-C Mental Model: From C Pointers to Production App
- Module 80 Projects — Part 1: Calculator, Contact Manager, Network Client, Download Manager
- Module 80 Projects — Part 2: Notes App, Core Data App, Swift Mixed App, Legacy Modernization
- Final Capstone — Building a Production Objective-C Application
- Advanced Objective-C Type System
- Ownership Qualifiers and Out Parameters
- Core Foundation
- Toll-Free Bridging
- NS_ENUM and NS_OPTIONS
- Objective-C API Annotations
- Swift API Customization
- Objective-C Method Family Conventions
- Initializer Design
- Fast Enumeration Internals
- NSInvocation
- NSMethodSignature
- Objective-C Type Encodings
- objc_msgSend in Depth
- objc_msgSendSuper
- doesNotRecognizeSelector:
- Runtime Class Creation
- Associated Object Policies
- Runtime Loading and Initialization
- NSObject Fundamentals
- Equality and Hashing
- description and debugDescription
- Class Clusters
- Copy Semantics
- NSCopying and NSMutableCopying
- NSCoding and NSSecureCoding
- Run Loops
- Timers
- Streams
- NSPredicate and NSExpression
- NSCache
- Advanced NSOperation / OperationQueue
- Main-Thread Correctness
- Objective-C Concurrency Memory Model
- Method and Runtime Metadata
- Advanced Pointer and Casting Patterns
- Objective-C + C Callback Interoperability
- Objective-C + C++ Exception/Ownership Boundaries
- Property Semantics in Depth
- Objective-C Compiler and Preprocessor Details
- Header Architecture
- Modules and Module Maps — Deeper Coverage
- Availability and Version Compatibility
- Objective-C Runtime vs Static Compilation
- Dynamic Features vs Type Safety