摘要: 最近正好在解决后台的问题,看到大家在讨论网易公开课为什么可以后台下载?远远超过系统默认的后台时间600s,当时也觉得十分好奇,正好手机上装的有网易公开课,就拿到了网易公开课的ipa文件,分析了一下它的info.plist问题,发现毫无特殊之处,甚至没有指出后台任务的模式,一般都要指定music或者voip,所以深感诧异。当时便跟同时讨论了这件事情,都觉得很特别,但是也都相信肯定是用了某种我们不熟悉的技术,大家都在怂恿我给网易公开课的工作人员发封邮件请教一下,我呢还是决定先研究一下,然后再请教。 在想了一夜之后,第二天上午突然一到灵光乍现。这里在讲我的解决方案之前首先描述一下当前的两种持续... 阅读全文
posted @ 2013-08-03 15:03 CoderZHY 阅读(1194) 评论(0) 推荐(0) 编辑
摘要: iOS的后台播放实在是折磨人,各种原因导致不能后台播放,这次又遇到了audio unit初始化失败的问题。 情况是这样的:点击播放一首歌曲,然后快速使app进入后台模式,这个错误就比较常现了,大约有三四成的比例。这个真的是毫无头绪,感觉不到解决的希望,就各种看资料,这种搜索。上帝保佑,后来在stackoverflow上看到有一个问题是voip在后台模式收到消息后启动失败,也是这个错误,看到一个回答说是因为在后台模式无法打开音频设备的缘故。当时只是纪录了答案,但是毕竟情况不太一样,别人的问题是在后台启动失败,咱是在进入后台的时候偶尔失败,不是必现,只是概率较高而已。所以也不是很放在心上。后... 阅读全文
posted @ 2013-08-03 14:39 CoderZHY 阅读(1300) 评论(0) 推荐(0) 编辑
摘要: 这一段时间做的这个项目一直很忙,所以都没有时间总结。最近终于稍有空闲,并且解决了几个所谓的大问题,特意记录一下,避免以后忘记。 由于公司的音频播放引擎是用audio unit 写的,这项技术非常底层,需要处理很多东西,因此比较容易出问题。前段时间测试经常反馈后台有时候不能播放,并且找不到规律,也就是不能重现的bug,这种bug最叫人头疼,想解决的时候不能重现,你放弃了它就蹦出来烦你。后来在我的不懈努力下,终于找到了重现的方法。当app在后台模式下被中断后,在endInterruptionWithFlags:(NSUInteger)flags 中再次激活audio session的话会收到... 阅读全文
posted @ 2013-08-03 14:22 CoderZHY 阅读(1825) 评论(1) 推荐(0) 编辑
摘要: 这里纪录下来,方便自己以后的查看,毕竟这个路径名字太长了。 默认情况下,在10.7中个人用户下面的library是隐藏的,因此,首先需要在终端输入chflags nohidden ~/library/使该目录可见。 模拟器下app的安装路径如下:Users/用户名/Library/Application Support/iPhone Simulator/6.0/Applications/程序的GUID/,用户名对应你个人当前的用户,6.0表示当前的模拟器版本,程序的GUID表示当前正在模拟器执行的程序。 编译完成后生成的app存放路径如下:Users/用户名/Library/Deve... 阅读全文
posted @ 2013-03-14 14:22 CoderZHY 阅读(199) 评论(0) 推荐(0) 编辑
摘要: ARC很方便也很好,但是对于有强迫症的程序员还是喜欢自己管理内存,有种自己控制一切的感觉。而自己管理内存却要冒着很大的风险,稍不留意就会导致内存泄漏或者内存被过早地收回。好在Objective-C从许多方面帮助我们写出健壮的程序。在Objective-C中所有的对象都分配在堆上,通过指针访问。这样可以大大地提高对象的生命周期,方便内存的管理,但是如果不及时的释放不需要的内存块,程序将收到低内存警告,进而导致程序被异常终止。因此,Objective-C引入了引用计数功能,方便程序在不需要的时候是释放内存。 想要写出健壮的应用程序,有以下几条规则需要遵循:对于程序本身具有所有权的对象,一定要... 阅读全文
posted @ 2013-03-14 10:31 CoderZHY 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 基于AV Foundation 框架实现了一个Camera,这里对其进行开源,可在https://github.com/zhzhy/Camera下载,包含源码和demo。本Camera功能强大,主要包含以下功能支持多种分辨率。支持拍照和录制视频。使用opengl es进行视频渲染。支持yuv420bp和yuv420p。支持直接操作视频数据,可以方便实现各种滤镜。对同一功能提供多种不同级别的实现,满足各种场景的需求。 阅读全文
posted @ 2013-02-25 11:32 CoderZHY 阅读(278) 评论(2) 推荐(0) 编辑
摘要: NSLayoutConstraint 提供了更加强大的表达能力相比UIViewAutoresizing,UIViewAutoresizing只是定义了父视图和子视图的关系,无法表示视图与视图之间的关系。而NSLayoutConstraint不但可以表达父视图与子视图之间的关系,同时提供了描述视图之间的关系的能力。尤其时随着iPhone屏幕大小的改变,NSLayoutConstraint的意义重大。NSLayoutConstraint提供了两个api生成视图之间的限制:(NSArray *)constraintsWithVisualFormat:(NSString *)format option 阅读全文
posted @ 2013-02-25 11:23 CoderZHY 阅读(947) 评论(0) 推荐(0) 编辑
摘要: 制作可以运行在越狱机器上的软件主要分为两个关键的步骤:1.使Code Signing 实效。进入/Applications。右键单击 XCode,选择显示包内容。拷贝 Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/SDKSettings.plist 到桌面或者当前用户的其他目录,不要使用拖拽的方式。打开SDKSettings.plist 将DefaultProperties 下面的CODE_SIGNING_REQUIRED 设为 NO。将SDKSettings.plist拷贝回之前的目 阅读全文
posted @ 2012-08-11 19:21 CoderZHY 阅读(1822) 评论(0) 推荐(0) 编辑
摘要: 昨晚完成了一篇转换RGB24为BGR24的文章,今天续写如何将RGB24转换为RGBA。一点显著的不同是RGB占有3个字节,而RGBA则占有4个字节,相比RGB TO BGR的简单性,RGB TO RGBA一定需要为RGBA另外分配存储空间。类似于昨天的第一中方法这里就不再提供了,一是简单,二呢效率太低。1.使用ACCERLERATE.FRAMEWORK提供的库函数vImageConvert_RGB888toARGB8888 和vImagePermuteChannels_ARGB8888- (void)transformRGBToRGBA:(const UInt8 *)pict width:( 阅读全文
posted @ 2012-07-31 18:13 CoderZHY 阅读(3337) 评论(0) 推荐(0) 编辑
摘要: 为了适应多平台,也是满足跨平台的要求,有时候必须转换。因为rgb像素在windows上是按照BGRBGR这样的顺序存储的,而在OS X上则是按照RGBRGB存储。所以如果不做转换,必然在某个平台上出现色差。这里主要演示如何在OS X上实现这种转换。1.第一种方法最为简单也最慢,就是写一个循环,交换R和B的位置。Uint8 tmpValue = 0;for(int i = 0; i < numOfPixels; i+=3){ tmpValue = pixelBuffer[i]; pixelBuffer[i] = pixelBuffer[i + 2]; pixelBuffer[i... 阅读全文
posted @ 2012-07-30 19:25 CoderZHY 阅读(1673) 评论(0) 推荐(0) 编辑