views:

348

answers:

2

I have a small iPhone app that stores a list of objects. The user can add and remove objects, but this list will remain fairly small (most users would have 10-30 objects). NSUserDefaults seems much easier to work with, but will sqlite3 be faster? With only 30 "records" will there be any noticeable difference?

+4  A: 

NSUserDefaults is for user preferences, usually basic objects like NSString or NSNumber. Sqlite, serializing a collection of objects in a property list, or Core Data are all valid options for storing user data such as model objects you created.

You're not going to see a speed difference, but it's still best to pick the correct mechanism for what you're doing. If it's just preferences then use NSUserDefaults, otherwise I would serialize your objects to a plist. If you're new to Cocoa I would avoid Core Data and even sqlite at first, to give yourself a chance to learn the basics first.

Marc Charbonneau
I am new to Cocoa but not database systems. Most of the tutorials I have read make it seem like there is a lot of overhead in sqlite statements. It seems like the standard is to read all of the data at launch and cache changes until the app is terminated.
Kevin
I am just going to continue using sqlite3. It seems like the more logical solution for this type of data.
Kevin
+2  A: 

Try with NSCoding protocol. Declare your class to implement NSCoding protocol:

@interface Person : NSObject <NSCoding>

Previous line promises to implement the following methods:

-(id)initWithCoder:(NSCoder *)coder;
-(void)encodeWithCoder:(NSCoder *)coder;

Your methods should look something like:

-(void)encodeWithCoder:(NSCoder *)coder {
  [super encodeWithCoder:coder];
  [coder encodeObject:firstName forKey:@"firstName"];
  [coder encodeObject:lastName forKey:@"lastName"];
}

-(id)initWithCoder:(NSCoder *)coder {
  [super init];
  firstName = [[coder decodeObjectForKey:@"firstName"] retain];
  lastName = [[coder decodeObjectForKey:@"lastName"] retain];
  return self;
}
mperovic
I will have to look into this for my next project.
Kevin