1、plist读写array示例
#pragma 保存数据到plist
- (IBAction)addplist:(id)sender {
NSArray *data = @[@"aaa",@"bbb",@"ccc"];
BOOL result = [data writeToFile:@"/Users/xc/Desktop/a.plist" atomically:YES];
NSLog(@"保存数据到plist: %d",result);
}
#pragma 从plist读取数据
- (IBAction)getplist:(id)sender {
NSArray *data = [NSArray arrayWithContentsOfFile:@"/Users/xc/Desktop/a.plist"];
NSLog(@"从plist读取数据: %@",data);
}
2、@synchronized和dispatch_once
实现单例,可使用@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;
}
区别:
dispatch_once方法的性能要明显优于synchronized方法;
@synchronized采用的是递归互斥锁来实现线程安全,而dispatch_once的内部则使用了很多原子操作来替代锁,以及通过信号量来实现线程同步
3、instancetype与id
相同点:都可作为返回值
不同点:
1、instancetype 可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象
2、instancetype只能作为返回值,id可以作为参数
4、依赖数据库sqlite3
libsqlite3.0.tbd、 libsqlite3tbd区别:
libsqlite3.0.tbd 只是一个快捷方式,其实也是指向libsqlite3.tbd的,如果libsqlite3.0.tbd指向的就是最新的libsqlite3.tbd,就不用更新了
5、多工程依赖 oc版
一个workspace下有多个工程,依赖方式:
1、配置Build Phases --> Link Binary With Libraries,添加其他工程依赖;
2、配置Build Setting --> Header Search Paths,双击右侧,弹出面板,鼠标拖入包含头文件的工程目录;
6、多工程依赖 swift版
一个workspace下有多个工程,依赖方式:
1、配置Build Phases --> Link Binary With Libraries,添加其他工程依赖;
2、swift文件中引入依赖工程即可,如被依赖工程为testdao,引入写法:import testdao