NSUserDefaults vs sqlite3
Asked Answered
G

2

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?

Gyro answered 30/5, 2009 at 18:8 Comment(1)
Core Data is the best option for iPhone OS now.Gyro
S
5

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.

Splat answered 30/5, 2009 at 18:45 Comment(2)
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.Gyro
I am just going to continue using sqlite3. It seems like the more logical solution for this type of data.Gyro
R
2

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;
}
Redeeming answered 30/5, 2009 at 20:54 Comment(2)
I will have to look into this for my next project.Gyro
This is the answer for "How can I save objects to NSUserDefaults" and not discussing the benefits of the different possibilities.Pneumonoultramicroscopicsilicovolcanoconiosis

© 2022 - 2024 — McMap. All rights reserved.