随笔分类 -  ios

摘要:KVOController 是由 facebook 开源的 kvo 组件,其特点是简单易用且安全。KVO现状kvo 全称 key-value observing,由 cocoa 框架提供的支持观察者模式的技术,结合 Objective-C 非常易用,在很多场合都可以有效地替换 NSNotificat... 阅读全文
posted @ 2015-07-06 14:01 CoderZHY 阅读(1537) 评论(0) 推荐(0)
摘要:Apple要求2015/2/1之后提交的包必须包含arm64,否则要被拒。因此,对于64-bit的支持可谓迫在眉睫,尤其是对于有很多遗留代码的项目,更要提早开工。如何支持arm64为了支持arm64结构,需要满足一下几个条件:在Architectures设置项里添加arm64条目,如果使用的Xcod... 阅读全文
posted @ 2014-12-17 21:07 CoderZHY 阅读(1815) 评论(0) 推荐(0)
摘要:首先粘上iOS开发文档对File's Owner的解释:One of the most important objects in a nib file is the File’s Owner object. Unlike interface objects, the File’s Owner object is a placeholder object that is not created when the nib file is loaded. Instead, you create this object in your code and pass it to the nib-l 阅读全文
posted @ 2014-01-02 18:28 CoderZHY 阅读(846) 评论(0) 推荐(0)
摘要:iOS官方文档极力推荐大家使用Nib开发程序的UI,也就是Interface Builder方式开发,这种开发模式相对代码实现的好处就是所见即所得,便于及时的调整。 这里主要谈两点:Nib文件的load过程和load方法。Nib文件的load过程根据iOS开发文档Resource Programming Guide的描述,Nib文件的load包含以下过程: 1.将Nib文件从磁盘载入内存,有两种技术可以加载Nib文件:NSBundle和UINib,具体细节会在第二节中描述。 2.执行unarchive和initialize操作,该过程主要由NSCoding Protocol中的initWit. 阅读全文
posted @ 2014-01-02 11:35 CoderZHY 阅读(2334) 评论(0) 推荐(0)
摘要:由于简单易用,尤其是相对于Delegate模式,Target-Action模式得到了广泛的应用,包括派生自UIControl的UIButton,UISlider等视图类,以及NSTimer,UIGestureRecognizer等Event Sources类。 Target-Action的主要优势就在于其的简单好用,当需要接收某个Object的的特定的事件时,只需发送以下消息即可,[Object addTarget:target action:@selector(eventHappend:) forControlEvents:]响应事件的对象只需实现eventHappend:方法即可。这里有. 阅读全文
posted @ 2013-12-30 15:56 CoderZHY 阅读(1754) 评论(0) 推荐(0)
摘要:1.局部变量必须初始化。在objective-C中成员变量会被自动初始化,根据变量类型自动被置为0,nil, NO等。但是局不变量需要手动初始化,这个类似于C/C++语言。2.self和super的区别。self表示的是只想当前对象的指针,而super并不是指向父类的指针,而只是一个编译器的指令符号,在编译的时候被展开为如下这种形式:struct objc_super {id receiver;SuperClass class;}; id表示self指针,SuperClass表示父类。所以super存在于self的上下文中,相对于self而言。3.convertRect的方法的使用小结。当动画 阅读全文
posted @ 2013-09-10 21:42 CoderZHY 阅读(222) 评论(0) 推荐(0)
摘要:这一段时间做的这个项目一直很忙,所以都没有时间总结。最近终于稍有空闲,并且解决了几个所谓的大问题,特意记录一下,避免以后忘记。 由于公司的音频播放引擎是用audio unit 写的,这项技术非常底层,需要处理很多东西,因此比较容易出问题。前段时间测试经常反馈后台有时候不能播放,并且找不到规律,也就是不能重现的bug,这种bug最叫人头疼,想解决的时候不能重现,你放弃了它就蹦出来烦你。后来在我的不懈努力下,终于找到了重现的方法。当app在后台模式下被中断后,在endInterruptionWithFlags:(NSUInteger)flags 中再次激活audio session的话会收到... 阅读全文
posted @ 2013-08-03 14:22 CoderZHY 阅读(1898) 评论(1) 推荐(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 阅读(1842) 评论(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 阅读(1710) 评论(0) 推荐(0)
摘要:今天遇到了这个实在变态的问题,很棘手关键时候啊,可是毫无头绪。开始试着从网上查找一下,答案很多,也很专业,说是因为MyClass没有在源代码中直接用到,又因为动态加载的缘故,导致运行时找不到该类,感觉实在不可思议。因为,我定义的类明明直接用到了,可是还是有问题。后来又看到有人说,他只是将MyClass代码拷贝出来,之后从项目中删除MyClass.h和MyClass.m,接着新建一个同名的MyClass类,再将之前拷出的类粘贴过去,结果问题就解决了。受此启发,我考虑将MyClass.m 和MyClass.h文件从项目中删除,然后再使用 add files to 添加进来。哈哈,问题顺利解决,实在 阅读全文
posted @ 2012-05-10 18:13 CoderZHY 阅读(2165) 评论(0) 推荐(0)
摘要:iOS为了节省电量,对电池等资源的使用是非常苛刻的。因此,WiFi 作为耗电大户显然被限制使用,可是对大多数程序进入后台模式后依然需要连接网络以及下载数据,这时就需要保持WiFi 处于active。在应用程序的Info.plist中将UIRequiresPersistentWiFi设为true,即使程序进入后台模式,依然可以使用WiFi。而当屏幕被锁时,系统认为设备处于空闲状态,无论如何设置WiFi都会被关闭,很无奈啊。详细资料参考http://www.apple.com.cn/developer/iphone/library/documentation/iPhone/Conceptual/i 阅读全文
posted @ 2012-05-09 19:02 CoderZHY 阅读(717) 评论(0) 推荐(0)
摘要:apple官方文档说extension是 匿名category,从形式上extension确实是不具名的category,但事实上差别很大。category就不细说,主要是期待subclass,为现有类动态添加新的方法。而引入extension的目的主要是Publicly-Readable, Privately-Writeable Properties,即实现外部只读,内部可写。如下所示,// .h@interface MyClass : NSObject@property (readonly, retain) NSString* myString;@end// .m@interface My 阅读全文
posted @ 2012-05-04 17:22 CoderZHY 阅读(2450) 评论(0) 推荐(0)
摘要:由于url支持26个英文字母、数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码。iOS中提供了函数stringByAddingPercentEscapesUsingEncoding对中文和一些特殊字符进行编码,但是stringByAddingPercentEscapesUsingEncoding的功能并不完善,对一些较为特殊的字符无效。而对这些字符则可以使用CFURLCreateStringByteAddingPercentEscapes函数,下面我们对其进行封装,提供一个完善的url编码函数。NSString* encodeURL(NSString* u 阅读全文
posted @ 2012-04-28 16:34 CoderZHY 阅读(4298) 评论(0) 推荐(2)
摘要:今天使用AudioFileOpenWithCallbacks异步读取文件时,总是提示AudioFileOpenWithCallbacks第三个和第五个参数类型不对,也就是AudioFile_WriteProc和AudioFile_SetSizeProc两个异步函数,可是明明是按照文档定义的,奇怪的很。文档里这两个函数分别声明为typedef OSStatus (*AudioFile_WriteProc) ( void *inClientData, SInt64 inPosition, UInt32 requestCount, ... 阅读全文
posted @ 2012-04-25 19:07 CoderZHY 阅读(589) 评论(0) 推荐(0)
摘要:在调试程序的过程中,有时候我们只是需要知道这个异常或者错误发生在源程序的哪个文件的哪一行,而不是为每一个可能的异常和错误都定义一个唯一的错误码,错误程序过度膨胀后,也会影响程序的可读性。这里,使用一个简单的宏printLineNumber,即可显示当前所在的行和源文件#define FILENAME NSString * fileName = [NSString stringWithUTF8String:__FILE__]#define printLineNumber FILENAME ;\printf("line %d in %s:",__LINE__,[[fileNam 阅读全文
posted @ 2012-04-24 18:05 CoderZHY 阅读(282) 评论(0) 推荐(0)
摘要:这些对比主要基本本地媒体文件,在使用这两项技术的过程中笔者发现一个奇怪的问题,即分别使用这两种不同的技术获取媒体文件的容量时,得到的数据不同,一般来说时audio file stream得到的数据小于 audio file。而audio file得到的数据等于使用 nsfilemanager 技术得到的数据大小,因此可知使用audio file stream技术得到的数据大小有误,可能是因为其主要用来播放在线媒体的缘故,处理的环境更为复杂,导致不够准确。更有甚者,使用 audio file技术可以获得大小的本地文件,使用audio file stream 技术却无法获得大小。以下附上上文中提到 阅读全文
posted @ 2012-04-23 17:06 CoderZHY 阅读(775) 评论(0) 推荐(0)
摘要:一直都有发现一个问题,即调用audioqueuestart成功后,立即调用audioqueuegetcurrenttime会返回失败,错误码为kAudioQueueErr_InvalidRunState。这就很奇怪了调用audioqueuegetprorperty函数返回kaudioqueue_isrunning为真,也就是这时audioqueue已经在运行了,而audioqueuegetcurrenttime的返回值却表示audioqueue并未运行,很是奇怪,只有调用一下CFRunLoopRunInMode函数之后,才可以获取audioqueue的运行时间。太奇怪了,百思不得其解。 阅读全文
posted @ 2012-04-20 11:00 CoderZHY 阅读(840) 评论(0) 推荐(0)
摘要:最近一直在搞音频相关的项目,很羡慕与酷我听听瞬时的启动速度,而我自己的在线音频需要3-4s的启动时间,本地音频则需要1-2s的启动时间。有一些强迫症的笔者希望能够大大提升audioqueue的启动速度,开始以为是本地文件的加载速度不行,因为一开始使用的是cfreadstream技术,是一种异步文件读取技术,所以初步假定问题在这。接下来使用了CFReadStreamCreateWithBytesNoCopy技术和NSTimer技术,但是并无明显的速度提升。后来经过多次的定位,发现audioqueuestart函数的启动就需要花费1-2s(这次数字都是在本人电脑上测出的,不具有普遍性),当下觉得很 阅读全文
posted @ 2012-04-20 10:49 CoderZHY 阅读(855) 评论(0) 推荐(0)
摘要:通过UIPageControl和UIScrollView的结合实现滑动翻页的效果时默认显示的时第一个view,而大多数时候我们可能需要将第二个或者第三个view作为默认页显示,而这时仅仅设置currentPage是不够的,它只能改变页面指示器的颜色,并不会完全达到我们需要的效果。其实很简单,仅仅通过更改scrollView的contentOffset即可平滑完美实现改变默认页面的功能,代码如下:CGPoint defaultPoint = ScrollView.contentOffset;defaultPoint.x += ScrollView.frame.size.width * i;Sc. 阅读全文
posted @ 2012-04-16 18:04 CoderZHY 阅读(1112) 评论(0) 推荐(0)
摘要:有时候在做界面设计的时候可能界面会比较复杂,完全使用代码实现可能比较麻烦,而单单地使用interface builder 则需要定义一个新的UIViewController,而我们仅仅需要一个view,这样未免有些小题大做。因此,这里介绍一种代码和interface builder相结合的方法,不用引入新的UIViewController。1. 首先使用interface builder 新建一个uiview的.xib文件。2. 向新建的uiview的.xib文件添加需要的控件。3. 定义一个继承自uiview的派生类。将上面新建的xib文件的派生类改为新定义的继承自uiview的派生类。4. 阅读全文
posted @ 2012-04-16 17:53 CoderZHY 阅读(2231) 评论(2) 推荐(1)