孙同生的博客

为美好的世界献上祝福

AV Player是一个用来播放给予时间的视听媒体的控制器对象。将视频资源导出到界面需要使用AVPlayerLayer类;AVPlayer只管理一个单独资源的播放,当需要播放多个音频资源可以使用子类AVQueuePlayer

不需要自定义播放器的情况可以使用 MPMoviewPlayerController

参考 http://www.cnblogs.com/kenshincui/p/4186022.html#avPlayer

初始化

示例:

1
2
3
4
5
6
7
NSURL *assetURL = [[NSBundle mainBundle] URLForResource:@"waves" withExtension:@"mp4"];
AVAsset *asset = [AVAsset assetWithURL:assetURL];
AVPlayerItem *playeritem = [AVPlayerItem playerItemWithAsset:asset];
self.player = [AVPlayer playerWithPlayerItem:playerItem];
AVPlayerLayer *playerLayer = [AVPlayer playerLayerWithPlayer:self.player];
//playerLayer.videoGravity=AVLayerVideoGravityResizeAspect;//视频填充模式
[self.view.layer addSubLayer:playerLayer];
阅读全文 »

使用System Sound Service播放音效

参考 http://www.cnblogs.com/kenshincui/p/4186022.html

步骤

  1. 调用AudioServicesCreateSystemSoundID( CFURLRef inFileURL, SystemSoundID* outSystemSoundID)函数获得系统声音ID。
  2. 如果需要监听播放完成操作,则使用AudioServicesAddSystemSoundCompletion( SystemSoundID inSystemSoundID, CFRunLoopRef inRunLoop, CFStringRef inRunLoopMode, AudioServicesSystemSoundCompletionProc inCompletionRoutine, void* inClientData)方法注册回调函数。
  3. 调用AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID) 或者AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID) 方法播放音效(后者带有震动效果)。

示例:

阅读全文 »

介绍

  • dynamicWebkit替换、
  • 动态添加方法 + 动态交换方法 -> UIButton防止多次点击、
  • 遍历变量 -> 隐藏键盘、
  • 遍历属性 -> 获取属性名
  • 遍历属性 -> 判断所有变量是否已经实例化
阅读全文 »

主要包含 字典与模型互转 、对象关联、遍历变量、遍历方法、遍历协议

阅读全文 »

介绍 消息发送以及相关的结构体
apple open source

objc_msgSend

给对象发送消息写法:

	`id returnValue = [somneObject messageName:parameter];`

编译器会将上诉代码转换为:

id = returnValue = objc_msgSend(someObject,@selector(messageName:),parameter);

其中 someObject叫做“接受者”(receiver),messageName叫做“选择子”(selector),选择子和参数合称“消息”

objc_msgSend 的定义: 该函数有两个参数,一个 id 类型,一个 SEL 类型。

id objc_msgSend(id self, SEL op, ...);

阅读全文 »

Autorelease对象什么时候释放?

在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,

而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop

阅读全文 »

在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写、和借助类别重名方法暴力抢先之外,还能使用Method Swizzling方法

原理

在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。

每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似函数指针,指向具体的Method实现。

阅读全文 »

使用

在iOS中操作SQLite数据库可以分为以下几步(注意先在项目中导入libsqlite3框架):

  1. 添加libsqlite3.tbd
  2. 打开数据库,利用sqlite3_open()打开数据库会指定一个数据库文件保存路径,如果文件存在则直接打开,否则创建并打开。打开数据库会得到一个sqlite3类型的对象,后面需要借助这个对象进行其他操作
  3. 执行SQL语句,执行SQL语句又包括有返回值的语句和无返回值语句。
    • 对于无返回值的语句(如增加、删除、修改等)直接通过sqlite3_exec()函数执行;
    • 对于有返回值的语句则首先通过sqlite3_prepare_v2()进行sql语句评估(语法检测),然后通过sqlite3_step()依次取出查询结果的每一行数据,对于每行数据都可以通过对应的sqlite3_column_类型()方法获得对应列的数据,如此反复循环直到遍历完成。当然,最后需要释放句柄。
阅读全文 »

NSRunLoop是IOS消息机制的处理模式

  • NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。
  • NSRunLoop 就是一直在循环检测,从线程start到线程end,检测inputsource(如点击,双击等操作)同步事件,检测timesource同步事件,检测到输入源会执行处理函数,首先会产生通知,corefunction向线程添加runloop observers来监听事件,意在监听事件发生时来做处理。
阅读全文 »
0%