摘要:
(1)很多从其他语言(例如C++)转到objective c的初学者,往往会问到一个问题,如何定义类的私有函数?这里的“私有函数”指的是,某个函数只能在类的内部使用,不能在类的外部,或者派生类内部使用。事实上,Objective C中可以定义类的私有变量,但由于objective c是动态语言,因此本质上是不存在私有函数的。但是,也可以用一些机制,来实现类似其他语言中私有函数的效果。(2)一般来说,可以使用两种方式来实现。第一种:只在.m文件中实现该函数,不在.h文件中声明,这样是最简单的方式。.h文件@interfaceMyClass { // My Instance Variable... 阅读全文
摘要:
1.前言 本文主要介绍在XCode5环境下,如何根据App自己生成的crashlog来调试真机上运行时产生的crash问题。2. 步骤(1)构造一段会crash的代码,并放到viewDidLoad里面,如下图所示: 以上代码会在objectAtIndex处因为数组越界而crash(2)在程序中捕... 阅读全文
摘要:
(1)点击桌面图标正常启动App或者杀死进程后点击推送消息启动App1.application:willFinishLaunchingWithOptions2.application:application:didFinishLaunchingWithOptions3.applicationDidBecomeActive4.application:didRegisterForRemoteNotificationsWithDeviceToken(2)拖下通知中心/双击Home键使App界面上移applicationWillResignActive(3)拖上通知中心/使App界面恢复原位appli 阅读全文
摘要:
凡是学习NSOperationQueue的人,都会遇到setMaxConcurrentOperationCount这个函数。在网上的许多博文中,都将setMaxConcurrentOperationCount解释为“设置线程池中的线程数”,我觉得这是一种以讹传讹的说法,相当不准确,容易误导初学者,至少我曾经就被误导过。实际上,NSOperationQueue 可以认为是线程池,但setMaxConcurrentOperationCount并不是设置在其中运行的线程数,看看官方文档: setMaxConcurrentOperationCount: Sets the maximum nu... 阅读全文
摘要:
1.前言 ASIHttprequest 是基于CFNetwork的,由于CFNetwork是比较底层的http库,功能比较少,因此,在ASIHttprequest中实现了http协议中比较多的功能,包括代理、gzip、认证、缓存等等。目前,虽然ASIHTTPRequest已经不如前两年那么流行,但是分析一下其代码,对掌握CFNetwork库和HTTP协议还是有好处的,本文将简单分析一下ASIHTTPRequest中几个主要函数的流程。2.处理HTTP Request的主要函数ASIHTTPRequest::main流程如下(只列举了主要工作):{ (1)若允许后台运行,则调用beginBa.. 阅读全文
摘要:
今天想在Mac10.9 XCode5的环境下把ffmpeg编译出来,本来以为很好搞定,结果版本一升级,以前的命令行不通了,出各种错误。折腾了三四个小时,最后终于成功了。编译流程:1.ffmpeg官网下载ffmpeg源代码,并解压。2.从命令行进入ffmpeg目录,输入以下脚本:模拟器版本:./con... 阅读全文
摘要:
在iOS7以前的系统中,App默认是不能后台运行的,如果要后台运行,可以采用以下两类方法: (1)使用beginBackgroundTaskWithExpirationHandler函数,向系统申请一段时间来执行需要后台运行的操作,这种方法的缺点是,后台操作最多只能运行10分钟,超过10分钟之后A... 阅读全文
摘要:
_objc_rootRetainCount(obj)可以获取obj的retainCount,不过不清楚是不是私有api,因此建议调试时使用。 阅读全文
摘要:
(1)在UIViewController里面使用了timer,会使得controller被retain,因此在viewdisapper时应将timer置为nil,否则controller的dealloc不会被执行。(2)如果在UIViewController里面使用ASIHttprequest发送了async请求,并且将request的delegate设置为controller,若请求没回来时就销毁了controller,会使得request的delegate变为野指针,解决方案是:销毁controller时,调用request的cancel来取消请求,或者将request的delegate设 阅读全文
摘要:
使用《iphone SprintBoard部分私有API总结》中提到的api,除了能对app运行次数进行监控以外,还可以实现自己的iphone桌面,并根据app 的使用次数对app图标进行排序,从而将使用最频繁的app排在前面。看看下面的tab bar,这个可不是iphone自己的桌面噢,是app里面实现的桌面,同时里面的app图标是按照app执行的次数来排序的。实现这个程序的原理是:(1)每隔一段时间,获取iphone上正在运行的app列表(2)过一段时间之后,再次获取正在运行的app列表,与上一次的列表比较。通过比较,就能知道哪个app来了前台,哪个app去了后台,哪个app已经退出了。( 阅读全文