1、plist讀寫(xiě)array示例
#pragma 保存數(shù)據(jù)到plist
- (IBAction)addplist:(id)sender {
NSArray *data = @[@"aaa",@"bbb",@"ccc"];
BOOL result = [data writeToFile:@"/Users/xc/Desktop/a.plist" atomically:YES];
NSLog(@"保存數(shù)據(jù)到plist: %d",result);
}
#pragma 從plist讀取數(shù)據(jù)
- (IBAction)getplist:(id)sender {
NSArray *data = [NSArray arrayWithContentsOfFile:@"/Users/xc/Desktop/a.plist"];
NSLog(@"從plist讀取數(shù)據(jù): %@",data);
}
2、@synchronized和dispatch_once
實(shí)現(xiàn)單例,可使用@synchronized或者dispatch_once,例如:
static id obj = nil;
+(instancetype)shareInstance
{
@synchronized(self) {
if (!obj) {
obj = [[SingletonObj alloc] init];
}
}
return obj;
}
static id obj = nil;
+(instancetype)shareInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
obj = [[SingletonObj alloc] init];
});
return obj;
}
區(qū)別:
dispatch_once方法的性能要明顯優(yōu)于synchronized方法;
@synchronized采用的是遞歸互斥鎖來(lái)實(shí)現(xiàn)線程安全,而dispatch_once的內(nèi)部則使用了很多原子操作來(lái)替代鎖,以及通過(guò)信號(hào)量來(lái)實(shí)現(xiàn)線程同步
3、instancetype與id
相同點(diǎn):都可作為返回值
不同點(diǎn):
1、instancetype 可以返回和方法所在類(lèi)相同類(lèi)型的對(duì)象,id只能返回未知類(lèi)型的對(duì)象
2、instancetype只能作為返回值,id可以作為參數(shù)
4、依賴(lài)數(shù)據(jù)庫(kù)sqlite3
libsqlite3.0.tbd、 libsqlite3tbd區(qū)別:
libsqlite3.0.tbd 只是一個(gè)快捷方式,其實(shí)也是指向libsqlite3.tbd的,如果libsqlite3.0.tbd指向的就是最新的libsqlite3.tbd,就不用更新了
5、多工程依賴(lài) oc版
一個(gè)workspace下有多個(gè)工程,依賴(lài)方式:
1、配置Build Phases --> Link Binary With Libraries,添加其他工程依賴(lài);
2、配置Build Setting --> Header Search Paths,雙擊右側(cè),彈出面板,鼠標(biāo)拖入包含頭文件的工程目錄;
6、多工程依賴(lài) swift版
一個(gè)workspace下有多個(gè)工程,依賴(lài)方式:
1、配置Build Phases --> Link Binary With Libraries,添加其他工程依賴(lài);
2、swift文件中引入依賴(lài)工程即可,如被依賴(lài)工程為testdao,引入寫(xiě)法:import testdao