iphone在本地存储数据有三种方式:数据库、NSUserDefaults和文件。
NSUserDefaults用于存储数据量较小的数据,比如用户配置。
但并不是所有的数据类型都可以存储在其中,NSUserDefaults只支持以下几种数据类型:NSString, NSNumber, NSDate, NSArray, NSDictionary。而且,自定义的对象放在如NSArray中,再存储在NSUserDefaults中也是不行的(亲测,确实是的)。
一、将数据存储到NSUserDefaults:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setBool:_theSwitch.on forKey:@"switchValue"]; [userDefaults setObject:_textField.text forKey:@"inputValue"];
二、读取NSUserDefaults中的数据:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; BOOL sw = [userDefaults boolForKey:@"switchValue"]; NSString *str = [userDefaults stringForKey:@"inputValue"];
针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理(即新数据会覆盖旧的数据)。
可以看出NSUserDefaults是非常好用的且方便的,但是有时候我们仍然需要存储一些自定义的对象,怎么办呢?
NSUserDefaults 只能存储基本对象,如果是自定义的对象,转换成nsdata存储进去就可以了。
网上有个方法:
让这个自定义类实现协议中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法(obj-c的协议protocol就是java的接口interface,就是C++的纯虚函数),然后把该自定义的类对象编码到 NSData中,再从NSUserDefaults中进行读取。
粘代码:
假设有这样一个简单的类对象
@interfaceBusinessCard: NSObject{ NSString*_firstName; NSString*_lastName; } @property(nonatomic,retain) NSString*_firstName; @property(nonatomic,retain) NSString*_lastName; @end; @implementationBusinessCard @synthesize_firstName,_lastName; -(void)dealloc{ [_firstNamerelease]; [_lastNamerelease]; [superdealloc]; } -(id)initWithCoder: (NSCoder*)coder { if(self= [super init]) { self._firstName=[coder decodeObjectForKey:@"_firstName"]; self._lastName=[coder decodeObjectForKey:@"_lastName"]; } returnself; } -(void)encodeWithCoder:(NSCoder *)coder { [coderencodeObject:_firstNameforKey:@"_firstName"]; [coderencodeObject:_lastNameforKey:@"_lastName"]; } @end
然后再存取时通过NSData做载体:
BusinessCard*bc= [[BusinessCard alloc]init]; NSUserDefaults*ud= [NSUserDefaultsstandardUserDefaults]; NSData*udObject= [NSKeyedArchiverarchivedDataWithRootObject:bc]; [udsetObject:udObjectforKey:@"myBusinessCard"]; [bcrelease]; udObject=nil; udObject=[ud objectForKey:@"myBusinessCard"]; bc=[NSKeyedUnarchiver unarchiveObjectWithData:udObject];
我照着这个方法,确实可以存储自定义的对象了。
1、使用Safari浏览网页的时候,如果你想把当前页面通过邮件发送给自己或别人,使用command+I,可以直接打开邮件并把当前网页附加到待发送的邮件中。
2、使用command+delete删除文件,彻底删除,使用shift+command+delete就会自动清空废纸篓
3、想知道某个目录下各个文件和子目录各占多少空间,终端输入 du -sh * 。
4、在Finder中打开文件使用鼠标双击或command+O。
5、在终端里输入ls
-a,可以显示该目录下的隐藏文件。
在Finder中输入shift+command+.可以显示隐藏文件,想恢复原来的设置,再输入一遍shift+command+.即可
6、Spotlight是OSX自带的强力搜索工具,可以进行全方位搜索。借助 Spotlight,可以在键入文字信息时就在开始电脑上查找任何内容。可以查找文稿、电子邮件、应用程序、歌曲、联系人等,还可以通过设置获得快速定义或执行简单数学计算。默认热键是Ctrl+Space。
7、推荐smcFanControl,Macbook专用风扇控制软件,免费。夏天空调屋里一般3000-4000转就够了,冬天一般不需要开启。
8、解压软件 The Unarchiver。很好用的。
9、利用你的触发角
OS X系统为用户提供了强大的Mission Control功能,今天为大家介绍其中的触发角。打开系统偏好设置-Mission Control-触发角,就可以对屏幕的四个角进行设置了。比如把左上角设置为将显示器置为睡眠状态,当我们暂时离开电脑时,顺手把鼠标移到左上角,屏幕就变黑了,非常方便。
10、维护你的mac sudo
periodic daily weekly monthly。
11、OS X提供了非常方便的截图工具,你可以随时随地截取屏幕画面。
shift+command+3:全屏幕截图;shift+command+4:通过鼠标选取截图。
截取的图片默认存放在桌面上,以时间命名。
系统默认截图格式是png,你可以通过如下命令修改截图文件类型,例如:
defaults write com.apple.screencapture type -string JPEG
12、shift + 6可以输入表情符号,比如(☆_☆)凸^-^凸
13、当你想在新的标签页打开网页时,只需要按住command键,点击链接即可。
14、通过shift+command+左右方向键,可以快速在Safari中打开的标签中进行切换。
15、比如有一个场景,你在一个目录下林林总总放了几百个文件,有图片有pdf有zip有doc等等,你想把后缀为png、jpeg、gif的图片复制到另一个文件夹去,最简单的方式是什么?
而是进入该目录,执行这样一个命令:
cp *.png *.jpeg *.gif /destpath
如果想剪切,就把cp改为mv
在网上看一日志,将自己觉得需要的整理出来。原文地址附上 http://my.oschina.net/u/819843/blog/100159。
PS: 从近段时间着手看代码的经验来看,自己通过跟前辈们的交流,总结出了以下两点经验。与君共享。
所谓从少到多意思就是说,先从代码较少的应用开始看起,比如先看500l的,再看1000l,再看2000l,5000l,8000l,然后看上万的甚至十万几十万百万行的代码
就是看的时候,先从大致框架上看,也就是泛读。先有一个整体的轮廓,大致知道每一块儿是做什么的;然后,在具体到每一个细节去看,小道某个api的具体应用,为什么那么用,甚至,一条逻辑语句也要搞明白,为什么这样写,而不是那么写。