www.it-ebooks.info Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and the publisher was aware of a trademark claim, the designations have been print- ed with initial capital letters or in all capitals. The author and publisher have taken care in the preparation of this book, but make no expressed or implied warranty of any kind and assume no responsibility for errors or omissions. No liability is assumed for incidental or consequential damages in connection with or arising out of the use of the information or programs contained herein. The publisher offers excellent discounts on this book when ordered in quantity for bulk purchases or special sales, which may include electronic versions and/or cus- tom covers and content particular to your business, training goals, marketing focus, and branding interests. For more information, please contact: U.S. Corporate and Government Sales (800) 382-3419 [email protected] For sales outside the United States, please contact: International Sales [email protected] Visit us on the Web: informit.com/aw Library of Congress Cataloging-in-Publication Data is on file. Copyright © 2011 Pearson Education, Inc. All rights reserved. Printed in the United States of America. This publication is pro- tected by copyright, and permission must be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or likewise. For infor- mation regarding permissions, write to: Pearson Education, Inc Rights and Contracts Department 501 Boylston Street, Suite 900 Boston, MA 02116 Fax (617) 671-3447 ISBN-13: 978-0-321-74362-6 ISBN-10: 0-321-74362-8 Text printed in the United States on recycled paper at RR Donnelly in Crawfordsville, Indiana. First printing February 2011 Editor-in-Chief Managing Editor Proofreader Cover Designer Mark Taub Kristy Hart Charlotte Kughen Gary Adair Acquisitions Editor Project Editor Publishing Compositor Mark Taber Anne Goebel Coordinator Gloria Schurick Development Copy Editor Vanessa Evans Editor Bart Reed Michael Thurston www.it-ebooks.info Table of Contents Introduction xiv 1 The Objective-C Philosophy 1 Understanding the Object Model 2 A Tale of Two Type Systems 4 C Is Objective-C 5 The Language and the Library 7 The History of Objective-C 9 Cross-Platform Support 12 Compiling Objective-C Programs 14 2 An Objective-C Primer 17 Declaring Objective-C Types 18 Sending Messages 22 Understanding Selectors 26 Declaring Classes 28 Using Protocols 33 Adding Methods to a Class 35 Using Informal Protocols 38 Synthesizing Methods with Declared Properties 39 Understanding self, _cmd, super 44 Understanding the isa Pointer 47 Initializing Classes 50 Reading Type Encodings 53 Using Closures 56 www.it-ebooks.info iv Contents 3 Memory Management 59 Retaining and Releasing 60 Assigning to Instance Variables 61 Avoiding Retain Cycles 63 Autorelease Pools 64 Using Autoreleased Constructors 66 Autoreleasing Objects in Accessors 67 Supporting Automatic Garbage Collection 68 Interoperating with C 70 Using Weak References 71 Allocating Scanned Memory 73 4 Common Objective-C Patterns 75 Supporting Two-Stage Creation 76 Copying Objects 78 Archiving Objects 80 Creating Designated Initalizers 84 Enforcing the Singleton Pattern 87 Delegation 89 Providing Façades 91 Creating Class Clusters 93 Using Run Loops 96 5 Numbers 99 Storing Numbers in Collections 101 Performing Decimal Arithmetic 105 www.it-ebooks.info Contents v Converting Between Strings and Numbers 108 Reading Numbers from Strings 110 6 Manipulating Strings 113 Creating Constant Strings 114 Comparing Strings 115 Processing a String One Character at a Time 119 Converting String Encodings 122 Trimming Strings 125 Splitting Strings 126 Copying Strings 128 Creating Strings from Templates 130 Storing Rich Text 133 7 Working with Collections 135 Using Arrays 137 Manipulating Indexes 139 Storing Unordered Groups of Objects 141 Creating a Dictionary 143 Iterating Over a Collection 145 Finding an Object in a Collection 149 Subclassing Collections 152 8 Dates and Times 157 Finding the Current Date 158 Converting Dates for Display 160 www.it-ebooks.info vi Contents Calculating Elapsed Time 163 Parsing Dates from Strings 165 Receiving Timer Events 166 9 Working with Property Lists 169 Storing Collections in Property Lists 170 Reading Data from Property Lists 173 Converting Property List Formats 176 Storing User Defaults 178 Storing Arbitrary Objects in User Defaults 182 10 Interacting with the Environment 185 Getting Environment Variables 186 Parsing Command-Line Arguments 188 Accessing the User’s Locale 190 Supporting Sudden Termination 191 11 Key-Value Coding 195 Accessing Values by Key 196 Ensuring KVC Compliance 197 Understanding Key Paths 201 Observing Keys 203 Ensuring KVO Compliance 205 12 Handling Errors 209 Runtime Differences for Exceptions 210 www.it-ebooks.info Contents vii Throwing and Catching Exceptions 214 Using Exception Objects 216 Managing Memory with Exceptions 218 Passing Error Delegates 221 Returning Error Values 222 Using NSError 223 13 Accessing Directories and Files 227 Reading a File 228 Moving and Copying Files 230 Getting File Attributes 232 Manipulating Paths 234 Determining if a File or Directory Exists 236 Working with Bundles 238 Finding Files in System Locations 240 14 Threads 245 Creating Threads 246 Controlling Thread Priority 247 Synchronizing Threads 250 Storing Thread-Specific Data 252 Waiting for a Condition 255 15 Blocks and Grand Central 259 Binding Variables to Blocks 260 Managing Memory with Blocks 264 Performing Actions in the Background 267 www.it-ebooks.info viii Contents Creating Custom Work Queues 269 16 Notifications 273 Requesting Notifications 274 Sending Notifications 276 Enqueuing Notifications 277 Sending Notifications Between Applications 278 17 Network Access 283 Wrapping C Sockets 284 Connecting to Servers 286 Sharing Objects Over a Network 289 Finding Network Peers 292 18 Debugging Objective-C 297 Inspecting Objects 298 Recognizing Memory Problems 300 Watching Exceptions 302 Asserting Expectations 304 Logging Debug Messages 306 19 The Objective-C Runtime 309 Sending Messages by Name 310 Finding Classes by Name 312 Testing If an Object Understands a Method 313 Forwarding Messages 315 Finding Classes 318 www.it-ebooks.info Contents ix Inspecting Classes 320 Creating New Classes 322 Index 325 www.it-ebooks.info This page intentionally left blank www.it-ebooks.info