1. //
  2. // SharedDBManager.h
  3. // ClassVarTest
  4. //
  5. // Created by Ashok Menon on 26/05/2010.
  6. // Copyright 2010 __MyCompanyName__. All rights reserved.
  7. //
  8.  
  9. #import <Cocoa/Cocoa.h>
  10.  
  11.  
  12. @interface SharedDBManager : NSObject {
  13.  
  14. }
  15.  
  16. -(id)init;
  17. -(void)instanceAddsRecord:(id)obj;
  18. -(id)instanceReturnsObjectAtIndex:(NSUInteger)index;
  19. -(int)instanceReturnsInstanceCount;
  20. +(void)initializeSharedDB;
  21. +(id)returnObjectAtIndex:(NSUInteger)index;
  22. +(int)instanceCount;
  23. +(void)addRecord:(id)obj;
  24. -(void)dealloc;
  25. +(void)purgeSharedDB;
  26. +(void)reInitializeSharedDB;
  27.  
  28. @end
  29.  
  30.  
  31.  
  32. //
  33. // SharedDBManager.m
  34. // ClassVarTest
  35. //
  36. // Created by Ashok Menon on 26/05/2010.
  37. // Copyright 2010 __MyCompanyName__. All rights reserved.
  38. //
  39.  
  40. #import "SharedDBManager.h"
  41.  
  42. static NSMutableArray *SharedDB;
  43. static int count;
  44.  
  45. @implementation SharedDBManager
  46.  
  47. -(id)init {
  48. if (self = [super init]) {
  49. count ++;
  50. }
  51. return self;
  52. }
  53.  
  54. -(void)instanceAddsRecord:(id)obj {
  55. [SharedDBManager addRecord:obj];
  56. }
  57.  
  58. -(id)instanceReturnsObjectAtIndex:(NSUInteger)index {
  59. return [SharedDBManager returnObjectAtIndex:index];
  60. }
  61.  
  62. -(int)instanceReturnsInstanceCount {
  63. return count;
  64. }
  65.  
  66. +(void)initializeSharedDB{
  67. SharedDB = [[NSMutableArray alloc] init];
  68. count = 0;
  69. }
  70.  
  71. +(id)returnObjectAtIndex:(NSUInteger)index {
  72. return [SharedDB objectAtIndex:index];
  73. }
  74.  
  75. +(int)instanceCount {
  76. return count;
  77. }
  78.  
  79. +(void)addRecord:(id)obj {
  80. [SharedDB addObject:obj];
  81. }
  82.  
  83. -(void)dealloc {
  84. count--;
  85. [super dealloc];
  86. }
  87.  
  88. +(void)purgeSharedDB {
  89. SharedDB = nil;
  90. }
  91.  
  92. +(void)reInitializeSharedDB {
  93. [SharedDBManager purgeSharedDB];
  94. SharedDB = [[NSMutableArray alloc] init];
  95. }
  96.  
  97. @end
  98.  
  99.  
  100.  
  101. //
  102. // ClassOne.h
  103. // ClassVarTest
  104. //
  105. // Created by Ashok Menon on 26/05/2010.
  106. // Copyright 2010 __MyCompanyName__. All rights reserved.
  107. //
  108.  
  109. #import <Cocoa/Cocoa.h>
  110.  
  111. @class SharedDBManager;
  112.  
  113. @interface ClassOne : NSObject {
  114. SharedDBManager *dbManager;
  115. }
  116.  
  117. @property (nonatomic, retain) SharedDBManager *dbManager;
  118.  
  119. -(id)init;
  120. -(void)dealloc;
  121.  
  122. @end
  123.  
  124.  
  125.  
  126. //
  127. // ClassOne.m
  128. // ClassVarTest
  129. //
  130. // Created by Ashok Menon on 26/05/2010.
  131. // Copyright 2010 __MyCompanyName__. All rights reserved.
  132. //
  133.  
  134. #import "ClassOne.h"
  135. #import "SharedDBManager.h"
  136.  
  137. @implementation ClassOne
  138.  
  139. @synthesize dbManager;
  140.  
  141. -(id)init {
  142. if (self = [super init]) {
  143. dbManager = [[SharedDBManager alloc] init];
  144.  
  145. NSString *record = [NSString
  146. stringWithFormat:@"Added from ClassOne"];
  147. [dbManager instanceAddsRecord:record];
  148. [record release];
  149. }
  150.  
  151. return self;
  152. }
  153.  
  154. -(void)dealloc {
  155. [dbManager release];
  156. [super dealloc];
  157. }
  158. @end
  159.  
  160.  
  161.  
  162. //
  163. // ClassOne.h
  164. // ClassVarTest
  165. //
  166. // Created by Ashok Menon on 26/05/2010.
  167. // Copyright 2010 __MyCompanyName__. All rights reserved.
  168. //
  169.  
  170. #import <Cocoa/Cocoa.h>
  171.  
  172. @class SharedDBManager;
  173.  
  174. @interface ClassTwo : NSObject {
  175. SharedDBManager *dbManager;
  176. }
  177.  
  178. @property (nonatomic, retain) SharedDBManager *dbManager;
  179.  
  180. -(id)init;
  181. -(void)dealloc;
  182.  
  183. @end
  184.  
  185.  
  186.  
  187. //
  188. // ClassOne.m
  189. // ClassVarTest
  190. //
  191. // Created by Ashok Menon on 26/05/2010.
  192. // Copyright 2010 __MyCompanyName__. All rights reserved.
  193. //
  194.  
  195. #import "ClassTwo.h"
  196. #import "SharedDBManager.h"
  197.  
  198. @implementation ClassTwo
  199.  
  200. @synthesize dbManager;
  201.  
  202. -(id)init {
  203. if (self = [super init]) {
  204. dbManager = [[SharedDBManager alloc] init];
  205.  
  206. NSString *record = [NSString
  207. stringWithFormat:@"Added from ClassTwo"];
  208. [dbManager instanceAddsRecord:record];
  209. [record release];
  210. }
  211.  
  212. return self;
  213. }
  214.  
  215. -(void)dealloc {
  216. [dbManager release];
  217. [super dealloc];
  218. }
  219. @end
  220.  
  221.  
  222.  
  223. #import <Foundation/Foundation.h>
  224. #import "SharedDBManager.h"
  225. #import "ClassOne.h"
  226. #import "ClassTwo.h"
  227.  
  228. int main (int argc, const char * argv[]) {
  229. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  230.  
  231. [SharedDBManager initializeSharedDB];
  232.  
  233. ClassOne *classA = [[ClassOne alloc] init];
  234. ClassTwo *classB = [[ClassTwo alloc] init];
  235.  
  236. NSLog(@"Instances of SharedDB: %d", [SharedDBManager instanceCount]);
  237.  
  238. NSLog(@"Object Created by ClassOne, Accessed by ClassOne: %@", [classA.dbManager instanceReturnsObjectAtIndex:0]);
  239. NSLog(@"Object Created by ClassTwo, Accessed by ClassTwo: %@", [classB.dbManager instanceReturnsObjectAtIndex:1]);
  240. NSLog(@"Object Created by ClassOne, Accessed by Class Two: %@", [classB.dbManager instanceReturnsObjectAtIndex:0]);
  241. NSLog(@"Object Created by ClassTwo, Accessed by Class One: %@", [classA.dbManager instanceReturnsObjectAtIndex:1]);
  242. NSLog(@"Object Created by ClassOne, Accessed by SharedDBManager: %@", [SharedDBManager returnObjectAtIndex:0]);
  243. NSLog(@"Object Created by ClassTwo, Accessed by SharedDBManager: %@", [SharedDBManager returnObjectAtIndex:1]);
  244.  
  245. [SharedDBManager reInitializeSharedDB];
  246.  
  247. [SharedDBManager addRecord:@"First Record, Created by SharedDBManager"];
  248.  
  249. NSLog(@"Object Created by SharedDBManager, Accessed by Class One: %@", [classA.dbManager instanceReturnsObjectAtIndex:0]);
  250.  
  251. [classA release];
  252. [classB release];
  253. NSLog(@"Instance Count: %d", [SharedDBManager instanceCount]);
  254. [pool drain];
  255. return 0;
  256. }
  257.