异步回调
- 明确知道操作执行完成;
- 操作时间未知;
Block
- 对block中的内容强引用;
- 循环引用,类A的强property类B的强property block强引用self;
- 单例不用管循环引用;
内存划分
- 全局区;
- 静态区;
- 堆区;
- 栈区;
单例
- 如何创建单例?
- 何时创建单例?
- 单例的特性?
NSOperation
1
2
3
4
5
6
7
8
9
| -(void)start;
-(void)main;
-(void)cancel;
-(void)addDependency:(NSOperation*)op;
-(void)removeDependency:(NSOperation*)op;
@property BOOL executing;
@property BOOL cancelled;
@property BOOL finished;
@property copy void (^completionBlock)(void);
|
使用方法:
1、继承NSOperation,通过init方法初始化,重写main方法执行任务;
2、可以通过completionBlock设置执行完成回调;
3、可以方便的判断任务执行状态,取消任务等;
4、可以添加和删除依赖关系,依赖其他operation的执行;
5、可以通过NSCondition阻塞,加锁,生产者-消费者;
NSOperationQueue
1
2
3
4
5
| @property NSInteger maxCoucurrentOperationCount;
@property NSInteger operationCount;
-(void)addOperation:(NSOperation*)op;
-(void)cancelAllOperations;
-(void)waitUntilAllOperationsAreFinished;
|
使用方法:
1、初始化NSOperationQueue,设置同时可并行任务数量;
2、创建任务,并将其加入队列中,任务自动开始执行;
3、可以通过operationCount判断还有多少任务未执行;
HealthKit
功能:存放健康数据,自动合并;
读:读某一类别健康数据;
写:写某一类别健康数据;
改:改自己写的健康数据。
锁屏时无法读数据,保护用户数据安全。
UIPasteboard
将信息写到剪切板中。
1
2
| UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setString:string];
|
发送本地通知
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| // 创建一个本地推送
UILocalNotification *notification = [UILocalNotification new];
if (notification != nil) {
// 推送声音
notification.soundName = UILocalNotificationDefaultSoundName;
// 推送内容
notification.alertBody = NSLocalizedString(@"stopWatch.timing", @"已将打点计时信息复制到剪切板");
// 显示在icon上的红色圈中的数子
notification.applicationIconBadgeNumber++;
// 设置userinfo 方便在之后需要撤销的时候使用
NSDictionary *info = [NSDictionary dictionaryWithObject:kStopWatchKey forKey:kNotificationKey];
notification.userInfo = info;
// 添加推送到UIApplication
UIApplication *app = [UIApplication sharedApplication];
[app scheduleLocalNotification:notification];
}
|
string label
1
2
| NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
ceil()
|
相册和相机
取消选择照片和选择没有照片是不同的回调。
相片可以编辑,相机不可以编辑。
类方法、类变量、单例
埋点
点击量;
人次;
存留;
停留时间;