随笔分类 - iOS
摘要:GCD介绍(二): 多核心的性能概念为了在单一进程中充分发挥多核的优势,我们有必要使用多线程技术(我们没必要去提多进程,这玩意儿和GCD没关系)。在低层,GCD全局dispatch queue仅仅是工作线程池的抽象。这些队列中的Block一旦可用,就会被dispatch到工作线程中。提交至用户队列的Block最终也会通过全局队列进入相同的工作线程池(除非你的用户队列的目标是主线程,但是为了提高运行速度,我们绝不会这么干)。有两种途径来通过GCD“榨取”多核心系统的性能:将单一任务或者一组相关任务并发至全局队列中运算;将多个不相关的任务或者关联不紧密的任务并发至用户队列中运算;全局队列设想下面的
阅读全文
摘要:什么是GCD?Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。除了代码的平行执行能力,GCD还提供高度集成的事件控制系统。可以设置句柄来响应文件描述符、mach ports(Mach port用于 OS X上的进程间通讯)、进程、计时器、信号、用户生成事件。这些句柄通过GCD来并发执行。GCD的API很大
阅读全文
摘要:在iOS里面有时间涉及到网络请求,有时间涉及到数据库的查询,我们需要计算该段代码的效率,以及执行时间方面的问题,为此,可以使用下面方法:double a = CFAbsoluteTimeGetCurrent();block();//代码放到此处double b = CFAbsoluteTimeGetCurrent();unsignedint m = ((b-a) * 1000.0f); // convert from seconds to millisecondsNSLog(@"prefixString: %d ms",m);打印出a-b就是该段代码的执行时间
阅读全文
摘要:旧工程配置arc方案:1,直接在targets->build phases中修改compiler Flags,是否支持arc。添加:-fobjc-arc,就可以让旧项目支持arc。新工程配置arc方案,新工程里面使用ARC,但是使用旧的库没有使用arc:如果想让原来支持arc的不使用arc则添加-fno-objc-arc直接在targets->build phases中修改compiler Flags,这样以来,新旧工程的ARC适配问题就解决了。说明:在arc中,strong对应原来的retain与copy,weak对应原来的assign。EX:举例使用autorelease:NS
阅读全文
摘要:博客园IIViewDeckController的使用,左右拖拉菜单效果实现很多应用里面都实现了对应的侧拉 显示隐藏的效果,看起来很符合用户体验的类似于这种看起来很好看,今天去晚上搜下开源库,还是挺好用的,分享下1.首先创建一个空工程,这里不在细说了...导入这两个类.在appdalegate里面,: self.window= [[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease]; MainViewController* main = [[MainViewControlleralloc]initWithN
阅读全文
摘要:NSCondition的用法使用NSCondition,实现多线程的同步,即,可实现生产者消费者问题。基本思路是,首先要创建公用的NSCondition实例。然后:消费者取得锁,取产品,如果没有,则wait,这时会释放锁,直到有线程唤醒它去消费产品;生产者制造产品,首先也是要取得锁,然后生产,再发signal,这样可唤醒wait的消费者。- (IBAction)conditionTest:(id)sender{NSLog(@"begin condition works!");products = [[NSMutableArrayalloc] init];condition
阅读全文
摘要:iOS里面有三种调用函数的方式:直接调用方法 [对象名 方法];performselector: [对象名 perform方法];NSInvocation 调用在使用代理调用方法的时间,会出现警告,使用类似的强转 [(MainViewController*)self.delegatelineViewClicke:index];是一种方法但是有的时间两个类互相包含是有错的,我们只在一个类中使用了@class前向声明,这时间强转也是不行的我们可以在。h文件里面使用@class前向声明,在.m文件从新import,这样强转就又没问题了,或者最直接的方法是使用对象的perform方法调用,O...
阅读全文
摘要:在xcode里面,安装的时间默认自带的有模拟器,有时间为了调试需要使用个多个版本的模拟器在xcode -> preference 里面选择download,这里你可下载你需要的模拟器
阅读全文
摘要:1、代码无法高亮显示;2、代码不能自动补全,或者给出提示建议;(当然这个补全的功能我在设置当中是打开的状态)3、新建一个项目,代码还是依然没有高亮显示,但是有补全功能;4、然后我就在网络上搜索了相关的问题解决方案;5、在StackOverFlow当中有相关的解决方案:a. 关闭项目,打开Xcode;b. 进入Xcode->Window->Organizerc. 左边选中自己的项目,然后删除Derived Data;d. 关闭Xcode,重新打开项目(当然解决方案当中还有说删除.xcodeproj包当中的若干文件);e. 这样项目可以重新索引;6、但是我尝试了很多回,发现刚刚索引完后
阅读全文
摘要:xml有哪些解析技术?区别是什么?Answer: 有DOM,SAX,STAX等(1):DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问(2):SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问(3):STAX: STAX:Streaming API for XML (S
阅读全文
摘要:有DOM,SAX,STAX等(1):DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问(2):SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问(3):STAX: STAX:Streaming API for XML (StAX)
阅读全文
摘要:一. 第一步首先你要从网络上下载ASIHttpRequestlib,下载以后解压,增加到你的工程里面,这个时间检查工程内部是否已经导入成功,文件结构如下:ASIHTTPRequestConfig.hASIHTTPRequestDelegate.hASIProgressDelegate.hASICacheDelegate.hASIHTTPRequest.hASIHTTPRequest.mASIDataCompressor.hASIDataCompressor.mASIDataDecompressor.hASIDataDecompressor.mASIFormDataRequest.hASIInp
阅读全文
摘要:UIImagePickerControllerSourceTypesourceType=UIImagePickerControllerSourceTypeCamera; if(![UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) //判断相机是否可用,不可以去相册获取 sourceType=UIImagePickerControllerSourceTypePhotoLibrary;点击相册中的图片 货照相机照完后点击use 后触发的方法- (void)imagePicke
阅读全文
摘要:多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、线程池等等四个方面简单的讲解一下iphone中的多线程编程。 一、线程创建与启动 线程创建主要有二种方式: 当然,还有一种比较特殊,就是使用所谓的convenient method,这个方法可以直接生成一个线程并启动它,而且无需为线程的清理负责。这个方法的接口是: + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget
阅读全文
摘要:先一句话总结:strong类保持他们拥有对象的活着,weak类他们拥有的对象被人家一牵就牵走,被人家一干就干死。(strong是一个好大哥所以strong,呵呵,weak是一个虚大哥所以weak,呵呵)比如有一个对象是string类,实例是@“hello”现有两个strong的string指针大哥a和b都指向了hello,现在b大哥把改成了指向@“hi”。那么这时候a大哥指向的值是什么呢,答案还是“hello”。然后,a大哥看hi不错,也指向了hi,那么现在hello就被都抛弃了,也就从内存中删除了。因为a大哥是strong的,既是retain或者copy的,这两个东西是可以使对象保存在计算机
阅读全文
摘要:GCD (Grand Central Dispatch) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式。在Mac OS X 10.6和IOS 4.0之后开始支持GCD。使用GCD的一个理由就是方便。回想一下以前的多线程编程,我们会把异步调用的代码放到另外的一个函数中,并通过NSThread开启新线程来启动这段代码。 这种跳来跳去的流程对于复杂的逻辑简直就是一场灾难。更糟糕的是,调用线程时的环境对异步代码是不可见的,如果我们需要当时的临时变量的话只有两个选择: 保存到类成员变量中或者作为参数传递过去。前者会造成很多莫名奇妙的无关类成员,而后者的功能过于
阅读全文
摘要:在iOS里面,压缩图片跟在其他环境里面差不多,都和累死,就是对当前图片从新画图,制定一个尺寸的问题 UIImage* image = [UIImage imageNamed:@"cat.jpg"]; //压缩 CGRect rect = CGRectMake(0, 0, 140, 90); //制定一个尺寸 UIGraphicsBeginImageContext(rect.size); //获取当前 上下文 [image drawInRect:rect]; // 画图 image = UIGraphicsGetImageFromCurrentImageContext()..
阅读全文