You are previewing iOS 6 Programming Cookbook.

iOS 6 Programming Cookbook

Cover of iOS 6 Programming Cookbook by Vandad Nahavandipoor Published by O'Reilly Media, Inc.
  1. iOS 6 Programming Cookbook
  2. Preface
    1. Audience
    2. Organization of This Book
    3. Additional Resources
    4. Conventions Used in This Book
    5. Using Code Examples
    6. We’d Like to Hear from You
    7. Safari® Books Online
    8. Acknowledgments
  3. 1. The Basics
    1. 1.0. Introduction
    2. 1.1. Creating a Simple iOS App in Xcode
      1. Problem
      2. Solution
      3. Discussion
    3. 1.2. Understanding Interface Builder
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 1.3. Compiling iOS Apps
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 1.4. Running iOS Apps on the Simulator
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 1.5. Running iOS Apps on iOS Devices
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 1.6. Packaging iOS Apps for Distribution
      1. Problem
      2. Solution
      3. Discussion
    8. 1.7. Declaring Variables in Objective-C
      1. Problem
      2. Solution
      3. Discussion
    9. 1.8. Allocating and Making Use of Strings
      1. Problem
      2. Solution
      3. Discussion
    10. 1.9. Comparing Values in Objective-C with an if Statement
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 1.10. Implementing Loops with for Statements
      1. Problem
      2. Solution
      3. Discussion
    12. 1.11. Implementing while Loops
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 1.12. Creating Custom Classes
      1. Problem
      2. Solution
      3. Discussion
    14. 1.13. Defining Functionality for Classes
      1. Problem
      2. Solution
      3. Discussion
    15. 1.14. Defining Two or More Methods with the Same Name
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 1.15. Allocating and Initializing Objects
      1. Problem
      2. Solution
      3. Discussion
    17. 1.16. Adding Properties to Classes
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 1.17. Moving from Manual Reference Counting to Automatic Reference Counting
      1. Problem
      2. Solution
      3. Discussion
    19. 1.18. Typecasting with Automatic Reference Counting
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    20. 1.19. Delegating Tasks with Protocols
      1. Problem
      2. Solution
      3. Discussion
    21. 1.20. Determining Whether Instance or Class Methods Are Available
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    22. 1.21. Determining Whether a Class Is Available at Runtime
      1. Problem
      2. Solution
      3. Discussion
    23. 1.22. Allocating and Making Use of Numbers
      1. Problem
      2. Solution
      3. Discussion
    24. 1.23. Allocating and Making Use of Arrays
      1. Problem
      2. Solution
      3. Discussion
    25. 1.24. Allocating and Making Use of Dictionaries
      1. Problem
      2. Solution
      3. Discussion
    26. 1.25. Allocating and Making Use of Sets
      1. Problem
      2. Solution
      3. Discussion
    27. 1.26. Creating Bundles
      1. Problem
      2. Solution
      3. Discussion
    28. 1.27. Loading Data from the Main Bundle
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    29. 1.28. Loading Data from Other Bundles
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    30. 1.29. Sending Notifications with NSNotificationCenter
      1. Problem
      2. Solution
      3. Discussion
    31. 1.30. Listening for Notifications Sent from NSNotificationCenter
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  4. 2. Implementing Controllers and Views
    1. 2.0. Introduction
    2. 2.1. Displaying Alerts with UIAlertView
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 2.2. Creating and Using Switches with UISwitch
      1. Problem
      2. Solution
      3. Discussion
    4. 2.3. Customizing the UISwitch
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 2.4. Picking Values with UIPickerView
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 2.5. Picking the Date and Time with UIDatePicker
      1. Problem
      2. Solution
      3. Discussion
    7. 2.6. Implementing Range Pickers with UISlider
      1. Problem
      2. Solution
      3. Discussion
    8. 2.7. Customizing the UISlider
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 2.8. Grouping Compact Options with UISegmentedControl
      1. Problem
      2. Solution
      3. Discussion
    10. 2.9. Customizing the UISegmentedControl
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 2.10. Presenting and Managing Views with UIViewController
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 2.11. Presenting Sharing Options with UIActivityViewController
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 2.12. Implementing Navigation with UINavigationController
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 2.13. Manipulating a Navigation Controller’s Array of View Controllers
      1. Problem
      2. Solution
      3. Discussion
    15. 2.14. Displaying an Image on a Navigation Bar
      1. Problem
      2. Solution
      3. Discussion
    16. 2.15. Adding Buttons to Navigation Bars Using UIBarButtonItem
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 2.16. Presenting Multiple View Controllers with UITabBarController
      1. Problem
      2. Solution
      3. Discussion
    18. 2.17. Displaying Static Text with UILabel
      1. Problem
      2. Solution
      3. Discussion
    19. 2.18. Customizing the UILabel
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    20. 2.19. Accepting User Text Input with UITextField
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    21. 2.20. Displaying Long Lines of Text with UITextView
      1. Problem
      2. Solution
      3. Discussion
    22. 2.21. Adding Buttons to the User Interface with UIButton
      1. Problem
      2. Solution
      3. Discussion
    23. 2.22. Displaying Images with UIImageView
      1. Problem
      2. Solution
      3. Discussion
    24. 2.23. Creating Scrollable Content with UIScrollView
      1. Problem
      2. Solution
      3. Discussion
    25. 2.24. Loading Web Pages with UIWebView
      1. Problem
      2. Solution
      3. Discussion
    26. 2.25. Presenting Master-Detail Views with UISplitViewController
      1. Problem
      2. Solution
      3. Discussion
    27. 2.26. Enabling Paging with UIPageViewController
      1. Problem
      2. Solution
      3. Discussion
    28. 2.27. Displaying Popovers with UIPopoverController
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    29. 2.28. Displaying Progress with UIProgressView
      1. Problem
      2. Solution
      3. Discussion
    30. 2.29. Listening and Reacting to Keyboard Notifications
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    31. 2.30. Constructing and Displaying Styled Texts
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  5. 3. Auto Layout and the Visual Format Language
    1. 3.0. Introduction
    2. 3.1. Placing UI Components in the Center of the Screen
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 3.2. Defining Horizontal and Vertical Constraints with the Visual Format Language
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 3.3. Utilizing Cross View Constraints
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 3.4. Configuring Auto Layout Constraints in Interface Builder
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  6. 4. Constructing and Using Table Views
    1. 4.0. Introduction
    2. 4.1. Instantiating a Table View
      1. Problem
      2. Solution
      3. Discussion
    3. 4.2. Assigning a Delegate to a Table View
      1. Problem
      2. Solution
      3. Discussion
    4. 4.3. Populating a Table View with Data
      1. Problem
      2. Solution
      3. Discussion
    5. 4.4. Receiving and Handling Table View Events
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 4.5. Using Different Types of Accessories in a Table View Cell
      1. Problem
      2. Solution
      3. Discussion
    7. 4.6. Creating Custom Table View Cell Accessories
      1. Problem
      2. Solution
      3. Discussion
    8. 4.7. Displaying Hierarchical Data in Table Views
      1. Problem
      2. Solution
      3. Discussion
    9. 4.8. Enabling Swipe Deletion of Table View Cells
      1. Problem
      2. Solution
      3. Discussion
    10. 4.9. Constructing Headers and Footers in Table Views
      1. Problem
      2. Solution
      3. Discussion
    11. 4.10. Displaying Context Menus on Table View Cells
      1. Problem
      2. Solution
      3. Discussion
    12. 4.11. Moving Cells and Sections in Table Views
      1. Problem
      2. Solution
      3. Discussion
    13. 4.12. Deleting Cells and Sections from Table Views
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 4.13. Utilizing the UITableViewController for Easy Creation of Table Views
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 4.14. Displaying a Refresh Control for Table Views
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  7. 5. Storyboards
    1. 5.0. Introduction
    2. 5.1. Creating a Project with Storyboards
      1. Problem
      2. Solution
      3. Discussion
    3. 5.2. Adding a Navigation Controller to a Storyboard
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 5.3. Passing Data From One Screen to Another
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 5.4. Adding a Storyboard to an Existing Project
      1. Problem
      2. Solution
      3. Discussion
  8. 6. Concurrency
    1. 6.0. Introduction
    2. 6.1. Constructing Block Objects
      1. Problem
      2. Solution
      3. Discussion
    3. 6.2. Accessing Variables in Block Objects
      1. Problem
      2. Solution
      3. Discussion
    4. 6.3. Invoking Block Objects
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 6.4. Dispatching Tasks to Grand Central Dispatch
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 6.5. Performing UI-Related Tasks with GCD
      1. Problem
      2. Solution
      3. Discussion
    7. 6.6. Executing Non-UI Related Tasks Synchronously with GCD
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 6.7. Executing Non-UI Related Tasks Asynchronously with GCD
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 6.8. Performing Tasks After a Delay with GCD
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 6.9. Performing a Task Only Once with GCD
      1. Problem
      2. Solution
      3. Discussion
    11. 6.10. Grouping Tasks Together with GCD
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 6.11. Constructing Your Own Dispatch Queues with GCD
      1. Problem
      2. Solution
      3. Discussion
    13. 6.12. Running Tasks Synchronously with Operations
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 6.13. Running Tasks Asynchronously with Operations
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 6.14. Creating Dependency Between Operations
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 6.15. Creating Timers
      1. Problem
      2. Solution
      3. Discussion
    17. 6.16. Creating Concurrency with Threads
      1. Problem
      2. Solution
      3. Discussion
    18. 6.17. Invoking Background Methods
      1. Problem
      2. Solution
      3. Discussion
    19. 6.18. Exiting Threads and Timers
      1. Problem
      2. Solution
      3. Discussion
  9. 7. Core Location and Maps
    1. 7.0. Introduction
    2. 7.1. Creating a Map View
      1. Problem
      2. Solution
      3. Discussion
    3. 7.2. Handling the Events of a Map View
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 7.3. Pinpointing the Location of a Device
      1. Problem
      2. Solution
      3. Discussion
    5. 7.4. Displaying Pins on a Map View
      1. Problem
      2. Solution
      3. Discussion
    6. 7.5. Displaying Pins with Different Colors on a Map View
      1. Problem
      2. Solution
      3. Discussion
    7. 7.6. Displaying Custom Pins on a Map View
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 7.7. Converting Meaningful Addresses to Longitude and Latitude
      1. Problem
      2. Solution
      3. Discussion
    9. 7.8. Converting Longitude and Latitude to a Meaningful Address
      1. Problem
      2. Solution
      3. Discussion
  10. 8. Implementing Gesture Recognizers
    1. 8.0. Introduction
    2. 8.1. Detecting Swipe Gestures
      1. Problem
      2. Solution
      3. Discussion
    3. 8.2. Detecting Rotation Gestures
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 8.3. Detecting Panning and Dragging Gestures
      1. Problem
      2. Solution
      3. Discussion
    5. 8.4. Detecting Long Press Gestures
      1. Problem
      2. Solution
      3. Discussion
    6. 8.5. Detecting Tap Gestures
      1. Problem
      2. Solution
      3. Discussion
    7. 8.6. Detecting Pinch Gestures
      1. Problem
      2. Solution
      3. Discussion
  11. 9. Networking, JSON, XML, and Twitter
    1. 9.0. Introduction
    2. 9.1. Downloading Asynchronously with NSURLConnection
      1. Problem
      2. Solution
      3. Discussion
    3. 9.2. Handling Timeouts in Asynchronous Connections
      1. Problem
      2. Solution
      3. Discussion
    4. 9.3. Downloading Synchronously with NSURLConnection
      1. Problem
      2. Solution
      3. Discussion
    5. 9.4. Modifying a URL Request with NSMutableURLRequest
      1. Problem
      2. Solution
      3. Discussion
    6. 9.5. Sending HTTP GET Requests with NSURLConnection
      1. Problem
      2. Solution
      3. Discussion
    7. 9.6. Sending HTTP POST Requests with NSURLConnection
      1. Problem
      2. Solution
      3. Discussion
    8. 9.7. Sending HTTP DELETE Requests with NSURLConnection
      1. Problem
      2. Solution
      3. Discussion
    9. 9.8. Sending HTTP PUT Requests with NSURLConnection
      1. Problem
      2. Solution
      3. Discussion
    10. 9.9. Serializing Arrays and Dictionaries into JSON
      1. Problem
      2. Solution
      3. Discussion
    11. 9.10. Deserializing JSON into Arrays and Dictionaries
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 9.11. Integrating Twitter Functionality into Your Apps
      1. Problem
      2. Solution
      3. Discussion
    13. 9.12. Parsing XML with NSXMLParser
      1. Problem
      2. Solution
      3. Discussion
  12. 10. Audio and Video
    1. 10.0. Introduction
    2. 10.1. Playing Audio Files
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 10.2. Handling Interruptions while Playing Audio
      1. Problem
      2. Solution
      3. Discussion
    4. 10.3. Recording Audio
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 10.4. Handling Interruptions while Recording Audio
      1. Problem
      2. Solution
      3. Discussion
    6. 10.5. Playing Audio over Other Active Sounds
      1. Problem
      2. Solution
      3. Discussion
    7. 10.6. Playing Video Files
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 10.7. Capturing Thumbnails from a Video File
      1. Problem
      2. Solution
      3. Discussion
    9. 10.8. Accessing the Music Library
      1. Problem
      2. Solution
      3. Discussion
  13. 11. Address Book
    1. 11.0. Introduction
    2. 11.1. Requesting Access to the Address Book
      1. Problem
      2. Solution
      3. Discussion
    3. 11.2. Retrieving a Reference to an Address Book
      1. Problem
      2. Solution
      3. Discussion
    4. 11.3. Retrieving All the People in the Address Book
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 11.4. Retrieving Properties of Address Book Entries
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 11.5. Inserting a Person Entry into the Address Book
      1. Problem
      2. Solution
      3. Discussion
    7. 11.6. Inserting a Group Entry into the Address Book
      1. Problem
      2. Solution
      3. Discussion
    8. 11.7. Adding Persons to Groups
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 11.8. Searching the Address Book
      1. Problem
      2. Solution
      3. Discussion
    10. 11.9. Retrieving and Setting a Person’s Address Book Image
      1. Problem
      2. Solution
      3. Discussion
  14. 12. Files and Folder Management
    1. 12.0. Introduction
    2. 12.1. Finding the Paths of the Most Useful Folders on Disk
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 12.2. Writing to and Reading from Files
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 12.3. Creating Folders on Disk
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 12.4. Enumerating Files and Folders
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 12.5. Deleting Files and Folders
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 12.6. Securing Files on Disk
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 12.7. Saving Objects to Files
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  15. 13. Camera and the Photo Library
    1. 13.0. Introduction
    2. 13.1. Detecting and Probing the Camera
      1. Problem
      2. Solution
      3. Discussion
    3. 13.2. Taking Photos with the Camera
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 13.3. Taking Videos with the Camera
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 13.4. Storing Photos in the Photo Library
      1. Problem
      2. Solution
      3. Discussion
    6. 13.5. Storing Videos in the Photo Library
      1. Problem
      2. Solution
      3. Discussion
    7. 13.6. Retrieving Photos and Videos from the Photo Library
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 13.7. Retrieving Assets from the Assets Library
      1. Problem
      2. Solution
      3. Discussion
    9. 13.8. Editing Videos on an iOS Device
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  16. 14. Multitasking
    1. 14.0. Introduction
    2. 14.1. Detecting the Availability of Multitasking
      1. Problem
      2. Solution
      3. Discussion
    3. 14.2. Completing a Long-Running Task in the Background
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 14.3. Receiving Local Notifications in the Background
      1. Problem
      2. Solution
      3. Discussion
    5. 14.4. Playing Audio in the Background
      1. Problem
      2. Solution
      3. Discussion
    6. 14.5. Handling Location Changes in the Background
      1. Problem
      2. Solution
      3. Discussion
    7. 14.6. Saving and Loading the State of Multitasking iOS Apps
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 14.7. Handling Network Connections in the Background
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 14.8. Handling Notifications Delivered to a Waking App
      1. Problem
      2. Solution
      3. Discussion
    10. 14.9. Responding to Changes in App Settings
      1. Problem
      2. Solution
      3. Discussion
    11. 14.10. Opting Out of Multitasking
      1. Problem
      2. Solution
      3. Discussion
  17. 15. Core Data
    1. 15.0. Introduction
    2. 15.1. Creating a Core Data Model with Xcode
      1. Problem
      2. Solution
      3. Discussion
    3. 15.2. Generating Class Files for Core Data Entities
      1. Problem
      2. Solution
      3. Discussion
    4. 15.3. Creating and Saving Data Using Core Data
      1. Problem
      2. Solution
      3. Discussion
    5. 15.4. Reading Data from Core Data
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 15.5. Deleting Data from Core Data
      1. Problem
      2. Solution
      3. Discussion
    7. 15.6. Sorting Data in Core Data
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 15.7. Boosting Data Access in Table Views
      1. Problem
      2. Solution
      3. Discussion
    9. 15.8. Implementing Relationships in Core Data
      1. Problem
      2. Solution
      3. Discussion
  18. 16. Dates, Calendars, and Events
    1. 16.0. Introduction
    2. 16.1. Retrieving the List of Calendars
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 16.2. Adding Events to Calendars
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 16.3. Accessing the Contents of Calendars
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 16.4. Removing Events from Calendars
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 16.5. Adding Recurring Events to Calendars
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 16.6. Retrieving the Attendees of an Event
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 16.7. Adding Alarms to Calendars
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 16.8. Handling Event Changed Notifications
      1. Problem
      2. Solution
      3. Discussion
    10. 16.9. Presenting Event View Controllers
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 16.10. Presenting Event Edit View Controllers
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  19. 17. Graphics and Animations
    1. 17.0. Introduction
    2. 17.1. Enumerating and Loading Fonts
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 17.2. Drawing Text
      1. Problem
      2. Solution
      3. Discussion
    4. 17.3. Constructing, Setting, and Using Colors
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 17.4. Drawing Images
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 17.5. Constructing Resizable Images
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 17.6. Drawing Lines
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 17.7. Constructing Paths
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 17.8. Drawing Rectangles
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 17.9. Adding Shadows to Shapes
      1. Problem
      2. Solution
      3. Discussion
    11. 17.10. Drawing Gradients
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 17.11. Displacing Shapes Drawn on Graphic Contexts
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 17.12. Scaling Shapes Drawn on Graphic Contexts
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 17.13. Rotating Shapes Drawn on Graphic Contexts
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 17.14. Animating and Moving Views
      1. Problem
      2. Solution
      3. Discussion
    16. 17.15. Animating and Scaling Views
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 17.16. Animating and Rotating Views
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  20. 18. Core Motion
    1. 18.0. Introduction
    2. 18.1. Detecting the Availability of an Accelerometer
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 18.2. Detecting the Availability of a Gyroscope
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 18.3. Retrieving Accelerometer Data
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 18.4. Detecting Shakes on an iOS Device
      1. Problem
      2. Solution
      3. Discussion
    6. 18.5. Retrieving Gyroscope Data
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  21. 19. iCloud
    1. 19.0. Introduction
    2. 19.1. Setting Up Your App for iCloud
      1. Problem
      2. Solution
      3. Discussion
    3. 19.2. Storing and Synchronizing Dictionaries in iCloud
      1. Problem
      2. Solution
      3. Discussion
    4. 19.3. Creating and Managing Folders for Apps in iCloud
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 19.4. Searching for Files and Folders in iCloud
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 19.5. Storing User Documents in iCloud
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 19.6. Managing the State of Documents in iCloud
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 19.7. Handling Conflicts in iCloud Documents
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  22. 20. Pass Kit
    1. 20.0. Introduction
    2. 20.1. Creating Pass Kit Certificates
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 20.2. Creating Pass Files
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 20.3. Providing Icons and Images for Passes
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 20.4. Preparing Your Passes for Digital Signature
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 20.5. Signing Passes Digitally
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 20.6. Distributing Passes Using Email
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 20.7. Distributing Passes Using Web Services
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 20.8. Enabling Your iOS Apps to Access Passes on iOS Devices
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 20.9. Interacting with Passbook Programmatically
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  23. Index
  24. About the Author
  25. Colophon
  26. Copyright
O'Reilly logo

1.16. Adding Properties to Classes

Problem

You want to add properties to your classes so that you can take advantage of dot notation to access those values, as opposed to using methods on your classes.

Solution

Define properties in your classes using the @property keyword.

Discussion

Anything addressed via dot notation is a property, which is a shortcut to a method. What does that mean? Well, let’s have a look at an example:

NSObject *myObject = [[NSObject alloc] init];
myObject.accessibilityHint = @"Some string";

You can see that we allocated and initialized an object of type NSObject and used dot notation to access a property called accessibilityHint in that object. Where did accessibilityHint come from?

It’s quite simple. A property is defined using the @property keyword. In fact, if you hold down the Command key on your keyboard in Xcode, and simply click on the accessibilityHint property in the example that we just saw, you will be redirected to the NSObject.h file where you will see this:

@property(nonatomic, copy) NSString *accessibilityHint;

But what is a property? It is a high-level language feature—a shortcut, if you will—that allows developers to easily access getters and setter methods on instances of a class without having to refer to the getter and/or the setter method at all. If you want to set a property’s value, you simply use the equals sign to do so. If you want to read from the property, you simply point to it using dot notation.

Let’s look at this in detail. In Recipe 1.12, we saw how we create classes. We created a class called Person. Then in Recipe 1.13, we learned how to add methods to our classes. Now, by combining the concepts explored in these two recipes, we can learn more about properties. To start, let’s go to the Person.h file and define a property called firstName:

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, strong) NSString *firstName;

@end

Note

You will learn all about new Automatic Reference Counting keywords, such as strong, in Recipe 1.17.

A nonatomic property is a property that is not meant to be accessed and changed by multiple threads at the same time. Such a property or variable is not thread-safe. A thread-safe (atomic) variable will prevent multiple threads from writing to it at the same time, or a thread from reading it while another thread is writing to it. For performance reasons (as well as the overhead necessary for handling such variables), atomic properties are not by default provided in iOS by the runtime. Only apps developed for the Mac can take advantage of both atomic and nonatomic properties. If you want your properties to be atomic, you will need to handle threading and access on your own using locks or other mechanisms that are outside the scope of this book.

In terms of the setter and the getter methods, fortunately, we don’t have to write these two methods for properties manually. The LLVM compiler automatically generates these setter and getter methods by putting a hidden @synthesize in the implementation of our object. This keyword simply creates a getter and a setter method for that property. For instance, if you simply create a property named firstName, the compiler will take the following actions on your behalf:

  • Creates an instance method for you named _firstName. This rule applies similarly to any other property name.

  • Triggers the following synthesize for you in your implementation file without you having to touch it:

    @synthesize firstName = _firstName
  • Under Automatic Reference Counting, it also takes care of deallocating your properties for you.

Now we can go ahead and use our Person class. Here is an example:

#import "SomeOtherClass.h"
#import "Person.h"

@implementation SomeOtherClass

- (void) makeNewPerson{

  Person *newPerson = [[Person alloc] init];
  newPerson.firstName = @"Andrew";
  NSLog(@"First name = %@", newPerson.firstName);
  NSLog(@"First name = %@", [newPerson firstName]);

}

@end

The example code prints the first name of newPerson twice, first using its firstName property and then by calling the firstName getter method on that object. Both will point to the same method, which @synthesize created for us in the Person.m file.

Note

In an older version of the Objective-C runtime, for @property to work, we also had to define an instance variable. An instance variable is a variable whose memory management is done by the programmer herself. Instance variables are also not exposed to classes outside the scope of the class that defines them (i.e., they are not exposed to any class that simply imports the class with the instance variable). Instance variables are normally called ivars by professional Objective-C developers (ivar is pronounced I-WAR).

With the new runtime, we don’t have to define ivars anymore. We simply define the property and the LLVM compiler defines the ivar for us. If you are using the GCC compiler, which is rather unlikely, you will see big differences from how the LLVM compiler treats ivars. For instance, in GCC 4.2, an ivar is not accessible to any subclass of a class, whereas if you are using LLVM Compiler, a subclass of a class can use its superclass’s ivars. So make sure you are using Apple’s latest compiler, which is LLVM. If a property is read-only, the only way that property’s value can change is for the class that defines that property to use the ivar of that property to change the property’s value.

If you want to fiddle around with setter and getter methods, you are free to do so. Even if you have used @synthesize to allow the compiler to generate the setter and getter methods of a property for you, you can still go ahead and override those methods. For instance, in this example, I change the setFirstName: setter method of the firstName property of the Person:

#import "Person.h"

@implementation Person

- (void) setFirstName:(NSString *)paramFirstName{
  _firstName = [paramFirstName stringByAppendingString:@" Jr"];
}

- (id)init
{
  self = [super init];
  if (self) {
    // Initialization code here.
    _lastName = @"Carnegie";
  }

  return self;
}

@end

I have overridden the setter method of my firstName property to add a “ Jr” suffix to any string that I am told to assign to the firstName property. So when the setter and getters are invoked, as before:

Person *newPerson = [[Person alloc] init];
newPerson.firstName = @"Andrew";
NSLog(@"First name = %@", newPerson.firstName);
NSLog(@"First name = %@", [newPerson firstName]);
NSLog(@"Last name = %@", newPerson.lastName);

We will get the following printed out to the console window:

First name = Andrew Jr
First name = Andrew Jr
Last name = Carnegie

If you want to define a read-only property, all you have to do is to define your property using the @readonly keyword, like so:

@property (nonatomic, strong, readonly) NSString *lastName;

The best content for your career. Discover unlimited learning on demand for around $1/day.