![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS高级编程
文章平均质量分 66
richard_飞飞
天空中没有翅膀的痕迹,但我已经飞过
展开
-
dispatch_after使用方法详解
dispatch_after能让我们添加进队列的任务延时执行,该函数并不是在指定时间后执行处理,而只是在指定时间追加处理到dispatch_queue 该方法的第一个参数是time,第二个参数是dispatch_queue,第三个参数是要执行的block。 dispatch_time_t有两种形式的构造方式,第一种相对时间:DISPATCH_TIME_NOW表示现在,NSEC_原创 2014-12-26 20:44:01 · 20247 阅读 · 0 评论 -
Core Graphics
第一、UIKit:cocoa touch 框架,高层次的框架,允许开发人员创建视图、窗口、按钮和其他UI组件。同时将一些低级别的api引入到易于使用的高级别API中。Quartz 2D:IOS上绘图的主要引擎;UIKit上就使用Quartz。Core Graphics:它支持图形上下文、加载图像、绘制图像,等等。Core Animation 帮助开发者在IOS上实现动画原创 2014-05-06 18:39:10 · 1380 阅读 · 0 评论 -
CoreGraphics详解
CoreGraphics详解CoreGraphics详解CoreGraphics绘图绘制一个矩形绘制一个椭圆绘制曲线绘制圆形链接点来绘制为图形CoreGraphics绘图绘制一个矩形CGRect rectangle=CGRectMake(0, 0, 200, 200); //获取当前图形 CGContextRef ctx=UIGraphicsGetCurrentCon原创 2015-02-12 16:12:49 · 1701 阅读 · 0 评论 -
UIView实现动画效果
IOS封装了Core Animation来是实现动画,Core Animation的最大好处是可以帮助Mac或者iPhone的开发者减少代码量。因为如果你想用Core Image或者Open GL实现界面的动画特效,其实也是可以的,主要是非常麻烦。而用Core Animation可以极大简化开发难度和减少代码量,IOS提供的核心动画编程接口,可以让编程人员以非常简单的方式实现炫目流畅的动画效果原创 2013-08-15 17:59:43 · 2273 阅读 · 0 评论 -
CATransition实现动画
CATransition继承自CAAnimation,他是在layer实现动画效果,它比UIView实现的动画类型要多,可以实现:交叉淡化过渡 、新视图移到旧视图上面 、新视图把旧视图推出去 、将旧视图移开,显示下面的新视图 需要在frameworks中添加QuartzCore.framework在接口程序中加上头文件 #import CATransition的type原创 2013-12-23 12:27:32 · 2082 阅读 · 0 评论 -
IOS常用的简单动画
第一种 隐式动画这是一种最简单的动画,不用设置定时器,不用考虑线程或者重画实现代码:#import -(void)clickButton:(UIButton*)button{ [UIView beginAnimations:nil context:nil]; CGAffineTransform transform=CGA原创 2014-02-16 23:48:50 · 1621 阅读 · 0 评论 -
UIWindow详解
第一、UIWindow的创建iPhone应用程序通常只有一个UIWindow类的实例,该实例的创建如果是从nib文件创建,则通常有个属性变量,如果是用代码创建,则必须在创建时传入屏幕矩形,屏幕矩形可以通过UIScreen对象来取得,具体代码如下所示:self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScree原创 2013-08-30 15:10:09 · 3479 阅读 · 0 评论 -
CALayer 详解
CALayer 详解CALayer 详解综述UIView 和CALayer的区别属性其他重要属性综述UIView的继承结构为:UIResponder:NSObject。可以看出UIView的直接父类为UIResponder类,.CALayer的继承结构:NSObject,直接从NSObject继承,因为缺少了UIResponder类,由上可见UIResponder是用来响应事件的,也就是说U原创 2015-02-11 17:21:45 · 1329 阅读 · 0 评论 -
UIView动画
UIView类的很多属性都设计为动画,动画的属性是指当属性从一个值变成另外一个值时可以支持动画,同时通知UIKit需要执行什么样类型的动画,UIView对象支持动画的属性有如下几个:frame属性:可以使用该属性改变尺寸和位置bounds:改变尺寸center:改变视图的位置alpha:改变视图的透明度backgroundColor:改变视图的背景contentStretch:改变视图内容如何拉伸原创 2013-08-15 15:16:29 · 8984 阅读 · 0 评论 -
iOS常用设计模式——单例设计模式
单例设计模式详解单例设计模式详解基本概念在IOS中使用单例模式的情况非ARC环境创建单例模式的基本步骤非ARC环境具体代码实现ARC环境创建单例模式的基本步骤基本概念单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问在IOS中使用单例模式的情况1.如果说创建一个对象会耗费很多系统资源,那么此时原创 2015-03-30 17:47:16 · 885 阅读 · 0 评论 -
iOS常用设计模式——观察者设计模式
观察者设计模式详解观察者设计模式详解基本概念NSNotificationCenter的使用添加监听接收消息删除监视KVO的使用基本概念注册观察者观察者对象发生变化时的回调方法remove观察者身份代码实现基本概念观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.而在IOS开发原创 2015-03-31 16:43:48 · 935 阅读 · 0 评论 -
iOS常用设计模式——简单工厂设计模式
简单工厂设计模式详解简单工厂设计模式详解基本概念结构图经典的示例示例代码优点缺点使用条件基本概念“专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。” 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例。结构图ConcreteProduct1和ConcreteProduct2两个产品具有一个共同的父类IProject,简单工厂类为Simpl原创 2015-04-02 16:58:20 · 1098 阅读 · 0 评论 -
iOS常用设计模式——命令设计模式
命令设计模式详解命令设计模式详解基本概念NSInvocation的使用命令模式的体现基本概念命令设计模式将一个请求或行动作封装为对象。这个封装请求比原始的请求要灵活并且可以在对象之前被传递,存储,动态修改或者放进队列里面。苹果公司实现这种模式使用Target-Action机制和Invocation。NSInvocation的使用在 iOS中可以直接调用 某个对象的消息 方式有2种一种是perf原创 2015-05-23 18:22:33 · 1086 阅读 · 0 评论 -
Block存储域
__block说明符严格意义上来说是一种存储域说明符,用来指定该变量的存储位置在C语言中,static表示存在静态变量区域,auto表示存储在栈中,register表示存在寄存器__block变量是结构体类型的自动变量Block是objective-c对象,_NSConcreteStackBlock表示存储为栈,_NSConcreteGlobalBlock表示全局变量区原创 2015-02-07 16:55:12 · 1041 阅读 · 0 评论 -
iOS中block的使用详解
第一、block的使用1、截获自动变量的值typedef void(^TEST)(void);int main(int argc, const char * argv[]) { @autoreleasepool { TEST test; NSString *sample=@"hello"; test=^{原创 2014-12-26 14:50:15 · 956 阅读 · 0 评论 -
dispatch_semaphore使用方法
第一、引入dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); NSMutableArray *arr=[NSMutableArray new]; for (int i=0; i dispatch_async(queue, ^{[arr a原创 2015-02-02 14:14:36 · 1142 阅读 · 0 评论 -
objective-C 的消息调用机制
objective-C 的消息及消息转发机制第一、基本概念1、objc_class中method数据结构typedef struct objc_method *Method;typedef struct objc_ method { SEL method_name; char *method_types; IMP method_imp;};2、原创 2015-01-07 17:48:51 · 1141 阅读 · 0 评论 -
利用performSelectorInBackground和performSelectorOnMainThread实现多线程
NSObject类的performSelectorOnMainThread和performSelectorInBackground可以实现简单的多线程编程技术1、- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg创建一个线程在子线程执行,aSelector代表了新创建的线程,arg是传入的参数2、-原创 2014-08-19 11:02:00 · 5651 阅读 · 0 评论 -
NSThread 详解
第一、iOS主线程专门用来更新显示UI界面、处理用户触摸事件的,所以不能阻塞主线程,否则带来极坏的用户体验。一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行。 NSThread *red=[NSThread currentThread]; //获取当前线程NSThread *mainThread=[NSThread mainThread]; //获取主线程原创 2014-05-15 16:09:54 · 1168 阅读 · 0 评论 -
objective C 对象模型
第一、在OC中关于对象模型,有五个基本概念,Object(实例),Class(类),Metaclass(元类),Rootclass(根类),Rootclass‘s metaclass(根元类)第二、每一个object都有一个隐藏的isa指针,指向class,对象结构如下所示:typedef struct objc_class *Class;typedef struct objc_obj原创 2015-01-06 15:08:53 · 1273 阅读 · 0 评论 -
创建Dispatch Queue
第一、dispatch_queue_create 用于创建用户线程队列。可以创建Serial Dispatch Queue 和Concurrent Dispatch Queue两种队列,Serial Dispatch Queue是等待现在正在执行的Queue,即串行执行Concurrent Dispatch Queue不等待现在正在执行中的Queue,即并行队列1、创建Serial Dis原创 2014-08-19 14:09:02 · 2025 阅读 · 0 评论 -
IOS常用的性能优化策略
第一、不要阻塞住线程原创 2014-10-09 17:39:59 · 911 阅读 · 0 评论 -
iOS常见crash问题及crash日志分析
第一、插入空元素对于NSMutableArray、NSMutableDictionary、NSMutableSet等可变的对象,插入空元素时crash正确做法是加判断,sample code如下所示: NSDictionary *dic; NSMutableArray *arr=[NSMutableArray new]; if (dic) { [a原创 2015-01-11 23:41:32 · 1870 阅读 · 0 评论 -
iOS常用的加密算法
在iOS开发中,为了数据的安全经常对内容进行加密,在这儿我们对常用的加密算法进行了总结:1、MD5+ (NSString *)md5Hash:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5( cStr, strlen(cStr), re原创 2014-07-14 16:03:43 · 947 阅读 · 0 评论 -
dispatch_apply&dispatch_suspend&dispatch_resume使用
第一、dispatch_apply 是同步函数,会阻塞当前线程直到所有循环迭代执行完成。当提交到并发queue时,循环迭代的执行顺序是不确定的示例: dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_apply(10,原创 2015-01-31 17:51:15 · 3160 阅读 · 0 评论 -
dispatch group使用方法详解
第一、dispatch group可以用来将多个block组成一组以监测这些Block全部完成或者等待全部完成时发出的消息。使用函数dispatch_group_create来创建,然后使用函数dispatch_group_async来将block提交至一个dispatch queue,同时将它们添加至一个组。使用dispatch_group_notify增加监听,当group内的bloc原创 2015-01-31 11:32:21 · 3513 阅读 · 0 评论 -
使用字面量语法让iOS代码更漂亮
字面量语法第一、字面数值 复杂方法: NSNumber *someNumber=[NSNumber numberWithDouble:3.4]; NSLog(@"the value is %@",someNumber); 替代方法: NSNumber *a=@21.3; NSNumber *b=@32;原创 2014-11-06 15:59:08 · 2487 阅读 · 0 评论 -
dispatch_barrier_async的使用
dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行.在如下场景:在访问数据操作时,可以并行读取,因此这种操作应该放到concurrent Dispatch Queue中,写入操作是在任何读取操作执行之前,放到serial Dispatch Queue,在写入处理结束之前,读取处理操作不可进行。此时使用dispatc原创 2015-01-31 12:28:15 · 2105 阅读 · 0 评论 -
NSRunLoop
描述和目的处理的事件RunLoop机制Run Loop Modes描述和目的RunLoop是控制线程生命周期并接收事件进行处理的机制,是iOS事件响应与任务处理最核心的机制,它贯穿iOS整个系统。 runloop管理线程,当有任务和事件响应时,会去执行,然后将这个事件送到能处理它的地方,没有的时候处于休息状态。 通过RunLoop机制实现省电,流畅,响应速度快,用户体验好。处理的事件sta原创 2015-12-17 17:25:32 · 1066 阅读 · 0 评论