Book.h
上传用户:hechengdz
上传日期:2020-05-13
资源大小:1591k
文件大小:4k
源码类别:

iPhone

开发平台:

Objective-C

  1. /*
  2.     File: Book.h
  3. Abstract: 
  4. The Book class manages the in-memory representation of information about a single book.  
  5.  Version: 1.9
  6. Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
  7. Inc. ("Apple") in consideration of your agreement to the following
  8. terms, and your use, installation, modification or redistribution of
  9. this Apple software constitutes acceptance of these terms.  If you do
  10. not agree with these terms, please do not use, install, modify or
  11. redistribute this Apple software.
  12. In consideration of your agreement to abide by the following terms, and
  13. subject to these terms, Apple grants you a personal, non-exclusive
  14. license, under Apple's copyrights in this original Apple software (the
  15. "Apple Software"), to use, reproduce, modify and redistribute the Apple
  16. Software, with or without modifications, in source and/or binary forms;
  17. provided that if you redistribute the Apple Software in its entirety and
  18. without modifications, you must retain this notice and the following
  19. text and disclaimers in all such redistributions of the Apple Software.
  20. Neither the name, trademarks, service marks or logos of Apple Inc. may
  21. be used to endorse or promote products derived from the Apple Software
  22. without specific prior written permission from Apple.  Except as
  23. expressly stated in this notice, no other rights or licenses, express or
  24. implied, are granted by Apple herein, including but not limited to any
  25. patent rights that may be infringed by your derivative works or by other
  26. works in which the Apple Software may be incorporated.
  27. The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
  28. MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
  29. THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
  30. FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
  31. OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
  32. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
  33. OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  34. SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  35. INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
  36. MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
  37. AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
  38. STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
  39. POSSIBILITY OF SUCH DAMAGE.
  40. Copyright (C) 2008 Apple Inc. All Rights Reserved.
  41. */
  42. #import <Foundation/Foundation.h>
  43. #import <sqlite3.h>
  44. @interface Book : NSObject {
  45.     // Opaque reference to the underlying database.
  46.     sqlite3 *database;
  47.     // Primary key in the database.
  48.     NSInteger primaryKey;
  49.     // Attributes.
  50.     NSString *title;
  51.     NSDate *copyright;
  52.     NSString *author;
  53.     // Internal state variables. Hydrated tracks whether attribute data is in the object or the database.
  54.     BOOL hydrated;
  55.     // Dirty tracks whether there are in-memory changes to data which have no been written to the database.
  56.     BOOL dirty;
  57.     NSData *data;
  58. }
  59. // Property exposure for primary key and other attributes. The primary key is 'assign' because it is not an object, 
  60. // nonatomic because there is no need for concurrent access, and readonly because it cannot be changed without 
  61. // corrupting the database.
  62. @property (assign, nonatomic, readonly) NSInteger primaryKey;
  63. // The remaining attributes are copied rather than retained because they are value objects.
  64. @property (copy, nonatomic) NSString *title;
  65. @property (copy, nonatomic) NSDate *copyright;
  66. @property (copy, nonatomic) NSString *author;
  67. // Finalize (delete) all of the SQLite compiled queries.
  68. + (void)finalizeStatements;
  69. // Creates the object with primary key and title is brought into memory.
  70. - (id)initWithPrimaryKey:(NSInteger)pk database:(sqlite3 *)db;
  71. // Inserts the book into the database and stores its primary key.
  72. - (void)insertIntoDatabase:(sqlite3 *)database;
  73. // Brings the rest of the object data into memory. If already in memory, no action is taken (harmless no-op).
  74. - (void)hydrate;
  75. // Flushes all but the primary key and title out to the database.
  76. - (void)dehydrate;
  77. // Remove the book complete from the database. In memory deletion to follow...
  78. - (void)deleteFromDatabase;
  79. @end