Table of Contents
Introduction 1 Who This Book Is For  1
 What This Book Covers 1
 What Is New in This Edition 1
 How This Book Is Structured 2
 What You Need to Use This Book 5
 Finding Apple Documentation 5
 Source Code 5
 Errata 6
 Part I: What’s New? 7
 Chapter 1 The Brand New Stuff 9
 What’s New 9
 Summary 13
 Further Reading 14
 Chapter 2 Getting Comfortable with Xcode 4 and the LLVM Compiler 15
 Getting to Know the User Interface 16
 All in One Window 18
 Navigating the Navigators 19
 Help from Your Assistant 21
 Integrated Interface Builder 21
 LLVM Compiler: A Tryst with the Brain 23
 What’s New in LLVM 4 23
 Git Your Versions Here 27
 Schemes 29
 Build Configurations You Can Comment 31
 Migrating Your Code to Objective-C ARC 32
 Xcode 4 Organizer 34
 Summary 35
 Further Reading 35
 Part II: Getting the Most Out of Everyday Tools 37
 Chapter 3 Everyday Objective-C 39
 Naming Conventions 39
 Automatic Reference Counting 41
 Properties 44
 Accessors 47
 Categories and Extensions48
 Formal and Informal Protocols 52
 Summary 54
 Further Reading54
 Chapter 4 Hold On Loosely: Cocoa Design Patterns 55
 Understanding Model-View-Controller    55
 Understanding Delegates and Data Sources   58
 Working with the Command Pattern 59
 Working with the Observer Pattern 67
 Working with the Singleton Pattern 70
 Summary 72
 Further Reading 73
 Chapter 5 Memory Management with Objective-C ARC 75
 Introduction to Objective-C ARC 75
 What Is ARC? 76
 Common ARC Migration Errors 83
 Summary 86
 Further Reading 86
 Chapter 6 Getting Table Views Right   89
 UITable View Class Hierarchy 89
 Understanding Table Views 90
 Summary 102
 Further Reading 103
 Chapter 7 Great at Any Angle: Collection Views and Auto Layout 105
 Collection Views 105
 Cocoa Auto Layout 116
 Summary 123
 Further Reading 123
 Chapter 8 Better Drawing 125
 iOS’s Many Drawing Systems 125
 UIKit and the View Drawing Cycle 126
 View Drawing Versus View Layout 128
 Custom View Drawing 129
 Optimizing UIView Drawing 144
 CGLayer 148
 Summary 150
 Further Reading 150
 Chapter 9 Layers Like an Onion: Core Animation  151
 View Animations 151
 Managing User Interaction 153
 Drawing with Layers 154
 Moving Things Around 158
 Into the Third Dimension 164
 Decorating Your Layers 168
 Auto-Animate with Actions 170
 Animating Custom Properties 171
 Core Animation and Threads 173
 Summary 173
 Further Reading 173
 Chapter 10 Tackling Those Pesky Errors 175
 Error-Handling Patterns 175
 Assertions 176
 Exceptions 178
 Catching and Reporting Crashes 179
 Errors and NSError 180
 Error Handler Blocks 182
 Logs 183
 Summary 185
 Further Reading 186
 Chapter 11 Location Services: Know Where You Are 187
 Core Location Framework 187
 Background Location 191
 Location Simulation 194
 Keeping an Eye on the Battery 195
 Summary 195
 Further Reading 195
 Part III: The Right Tool for the Job 197
 Chapter 12 Common UI Paradigms Using Table Views 199
 Pull-To-Refresh 199
 Infinite Scrolling 202
 Inline Editing and Keyboard 204
 Animating a UITableView  206
 Practical Implementations of Table View Animations 208
 Summary 211
 Further Reading 212
 Chapter 13 Controlling Multitasking 213
 Best Practices for Backgrounding: With Great Power
 Comes Great Responsibility 213
 When We Left Our Heroes: State Restoration 215
 Introduction to Multitasking and Run Loops 223
 Developing Operation-Centric Multitasking 224
 Multitasking with Grand Central Dispatch  229
 Summary 235
 Further Reading 236
 Chapter 14 REST for the Weary 237
 The REST Philosophy 238
 Choosing Your Data Exchange Format 238
 A Hypothetical Web Service 241
 Important Reminders  242
 RESTfulEngine Architecture (iHotelApp Sample Code) 243
 Summary 258
 Further Reading 258
 Chapter 15 Batten the Hatches with Security Services 261
 Understanding the iOS Sandbox 261
 Securing Network Communications 263
 Employing File Protection 270
 Using Keychains 272
 Using Encryption 274
 Summary 287
 Further Reading 287
 Chapter 16 Running on Multiple iPlatforms and iDevices 289
 Developing for Multiple Platforms 290
 Detecting Device Capabilities 294
 In App Email and SMS 300
 Checking Multitasking Awareness 300
 Supporting the iPhone 5 301
 UIRequiredDeviceCapabilities 303
 Summary 304
 Further Reading 304
 Chapter 17 Internationalization and Localization 305
 What Is Localization? 305
 Localizing Strings 306
 Auditing for Nonlocalized Strings 307
 Formatting Numbers and Dates 309
 Nib Files and Base Internationalization 312
 Localizing Complex Strings 312
 Summary 315
 Further Reading 315
 Chapter 18 Selling Past the Sale with In App Purchases 317
 Before You Start 317
 In App Purchase Products 317
 Setting Up Products on iTunes Connect 320
 In App Purchase Implementation 326
 Introduction to MKStoreKit 327
 Making the Purchase 331
 Downloading Hosted Content 332
 Testing Your Code  332
 Troubleshooting 333
 Summary 334
 Further Reading 334
 Chapter 19 Debugging 335
 LLDB 335
 Debugging with LLDB 335
 Breakpoints 338
 Watchpoints 343
 The LLDB Console 344
 NSZombieEnabled Flag 348
 Different Types of Crashes 348
 Collecting Crash Reports 352
 Third-Party Crash Reporting Services 353
 Summary 354
 Further Reading 354
 Chapter 20 Performance Tuning Until It Flies 357
 The Performance Mindset 357
 Welcome to Instruments 358
 Finding Memory Problems 360
 Finding CPU Problems 364
 Drawing Performance 368
 Optimizing Disk and Network Access 371
 Summary 371
 Further Reading 372
 Part IV: Pushing the Limits 373
 Chapter 21 Storyboards and Custom Transitions 375
 Getting Started with Storyboards 375
 Custom Transitions 380
 Customizing Your Views Using UIAppearance Protocol 382
 Summary  383
 Further Reading 383
 Chapter 22 Cocoa’s Biggest Trick: Key-Value Coding and Observing 385
 Key-Value Coding  385
 Key-Value Observing 395
 KVO Tradeoffs 399
 Summary  400
 Further Reading 401
 Chapter 23 Think Different: Blocks and Functional Programming 403
 What Is a Block? 403
 Declaring a Block 406
 Implementing a Block 408
 Blocks and Concurrency 410
 Block-Based Cocoa Methods 412
 Supported Platforms 415
 Summary 415
 Further Reading 415
 Chapter 24 Going Offline  417
 Reasons for Going Offline 417
 Strategies for Caching 418
 Data Model Cache 422
 Cache Versioning 426
 Creating an In-Memory Cache 427
 Creating a URL Cache 431
 Summary 433
 Further Reading 433
 Chapter 25 Data in the Cloud 435
 iCloud 435
 Third-Party Cloud Offerings 437
 Parse  438
 StackMob  442
 Disadvantages of Using a Backend as a Service 444
 Summary 444
 Further Reading 444
 Chapter 26 Fancy Text Layout 447
 The Normal Stuff: Fields, Views, and Labels 447
 Rich Text in UIKit 448
 Web Views for Rich Text 453
 Core Text 454
 Summary  464
 Further Reading 464
 Chapter 27 Building a (Core) Foundation 465
 Core Foundation Types 465
 Naming and Memory Management 466
 Allocators 467
 Introspection 468
 Strings and Data 469
 Collections 474
 Toll-Free Bridging 477
 Summary 480
 Further Reading 480
 Chapter 28 Deep Objective-C 481
 Understanding Classes and Objects 481
 Working with Methods and Properties 483
 How Message Passing Really Works 486
 Method Swizzling  494
 ISA Swizzling 496
 Method Swizzling Versus ISA Swizzling 498
 Summary 498
 Further Reading 498
 Index 501