Tips
dispatch_after dispatch_after属于GCD,能够实现延迟执行的语法,或者说是GCD中延迟执行的函数。 使用dispatch_after可以将一个需要延迟执行的任务放入一个队列中进行延迟执行。 注意事项:当block中的对象被释放,还执行block则崩溃
Receive
iOS视频实现边下载边播放的几种实现 1.本地实现http server 在iOS本地开启Local Server服务,然后使用播放控件请求本地Local Server服务,本地的服务再不断请求视频地址获取视频流,本地服务请求的过程中把视频缓存到本地,这种方法在网上有很多例子,有兴趣了解的人可自己下载例子查看。 2.使用AVPlayer的方法开启下载服务 AVURLAsset *urlAsset = [[AVURLAsset alloc]initWithURL:url options:nil]; AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:urlAsset]; [self.avPlayer replaceCurrentItemWithPlayerItem:item]; [self addObserverToPlayerItem:item];
3.使用AVAssetResourceLoader回调下载,也是最终决定使用的技术 AVAssetResourceLoader通过你提供的委托对象去调节AVURLAsset所需要的加载资源。而很重要的一点是,AVAssetResourceLoader仅在AVURLAsset不知道如何去加载这个URL资源时才会被调用,就是说你提供的委托对象在AVURLAsset不知道如何加载资源时才会得到调用。所以我们又要通过一些方法来曲线解决这个问题,把我们目标视频URL地址的scheme替换为系统不能识别的scheme,然后在我们调用网络请求去处理这个URL时把scheme切换为原来的scheme。
Algorithm
不用中间变量,用两种方法交换A和B的值 // 1.中间变量 void swap(int a, int b) { int temp = a; a = b; b = temp; }
// 2.加法 void swap(int a, int b) { a = a + b; b = a - b; a = a - b; }
// 3.异或(相同为0,不同为1. 可以理解为不进位加法) void swap(int a, int b) { a = a ^ b; b = a ^ b; a = a ^ b; }