前言致谢关于作者Chapter 1: Accustoming Yourself to Objective-CItem 1: Familiarize Yourself with Objective-C’s RootsItem 2: Minimize Importing Headers in HeadersItem 3: Prefer Literal Syntax over the Equivalent MethodsItem 4: Prefer Typed Constants to Preprocessor #defineItem 5: Use Enumerations for States, Options, and Status CodesChapter 2: Objects, Messaging, and the RuntimeItem 6: Understand PropertiesItem 7: Access Instance Variables Primarily Directly WhenAccessing Them InternallyItem 8: Understand Object EqualityItem 9: Use the Class Cluster Pattern to Hide Implementation DetailItem 10: Use Associated Objects to Attach Custom Data to Existing ClassesItem 11: Understand the Role of objc_msgSendItem 12: Understand Message ForwardingItem 13: Consider Method Swizzling to Debug Opaque MethodsItem 14: Understand What a Class Object IsChapter 3: Interface and API DesignItem 15: Use Prefix Names to Avoid Namespace ClashesItem 16: Have a Designated InitializerItem 17: Implement the description MethodItem 18: Prefer Immutable ObjectsItem 19: Use Clear and Consistent NamingItem 20: Prefix Private Method NamesItem 21: Understand the Objective-C Error ModelItem 22: Understand the NSCopying ProtocolChapter 4: Protocols and CategoriesItem 23: Use Delegate and Data Source Protocols for Interobject CommunicationItem 24: Use Categories to Break Class Implementations into Manageable SegmentsItem 25: Always Prefix Category Names on Third-Party ClassesItem 26: Avoid Properties in CategoriesItem 27: Use the Class-Continuation Category to Hide Implementation DetailItem 28: Use a Protocol to Provide Anonymous ObjectsChapter 5: Memory ManagementItem 29: Understand Reference CountingItem 30: Use ARC to Make Reference Counting EasierItem 31: Release References and Clean Up Observation State Only in deallocItem 32: Beware of Memory Management with Exception-Safe CodeItem 33: Use Weak References to Avoid Retain CyclesItem 34: Use Autorelease Pool Blocks to Reduce High-Memory WaterlineItem 35: Use Zombies to Help Debug Memory-Management ProblemsItem 36: Avoid Using retainCountChapter 6: Blocks and Grand Central DispatchItem 37: Understand BlocksItem 38: Create typedefs for Common Block TypesItem 39: Use Handler Blocks to Reduce Code SeparationItem 40: Avoid Retain Cycles Introduced by Blocks Referencing the Object Owning ThemItem 41: Prefer Dispatch Queues to Locks for SynchronizationItem 42: Prefer GCD to performSelector and FriendsItem 43: Know When to Use GCD and When to Use Operation QueuesItem 44: Use Dispatch Groups to Take Advantage of Platform ScalingItem 45: Use dispatch_once for Thread-Safe Single-Time Code ExecutionItem 46: Avoid dispatch_get_current_queueChapter 7: The System FrameworksItem 47: Familiarize Yourself with the System FrameworksItem 48: Prefer Block Enumeration to for LoopsItem 49: Use Toll-Free Bridging for Collections with Custom Memory-Management SemanticsItem 50: Use NSCache Instead of NSDictionary for CachesItem 51: Keep initialize and load Implementations LeanItem 52: Remember that NSTimer Retains Its TargetIndex