公司名称:深圳市明思联科科技有限公司
ios开发中的小常识
一非ARC的内存管理
1、autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象。当用户的代码运行告一段落时,开始等待用户的操作,自动释放池就会被释放掉(调用dealloc),池中的对象都会收到一个release,有可能会因此被销毁。
2、成员属性: readonly:不指定readonly,默认合成getter和setter方法。外界毫不关心的成员,则不要设置任何属性,这样封装能增加代码的独立性和安全性。相当于私有成员? assign:表示只进行简单的赋值,不会发送retain消息。 retain:会向旧值发送release消息,向新值发送retain消息。 copy:向旧值发release消息,向新值发送copy消息。
3、引用计数特殊情况: NSArray:当把一个对象添加到NSArray时,对象的引用计数会加1,移除时会减1。 UIView:addGestureRecognizer会对手势识别器的引用计数加1,removeGestureRecognizer会减1。
二图形API
1、Quartz2D的绘图总是发生在图形环境(Graphics Context)中
视图会在调用drawRect:方法进行绘图之前,创建好图形环境,通过UIGraphicsGetCurrentContext函数来获得这个图形环境。 如果直接在图像或者PDF上绘图,需要调用CGBitmapContextCreate或者CGPDFContextCreate函数来创建图形环境。
Quartz2D绘图的基础元素是路径。路径可以是一些基础几何形状,也可以是这些几何形状的组合当需要创建一条路径时,应当调用CGContextBeginPath函数; 当需要将路径绘制的起点移动到一个位置时,应当调用CGContextMoveToPoint函数,当想绘制一条线段时,应当调用CGContextAddLineToPoint。
CTM(当前变换矩阵)将绘图从用户空间映射到设备控件。当图形环境刚刚创建时,CTM初始化为一个单位矩阵。对CTM进行平移变换应当调用CGContextTranslateCTM函数,进行旋转变换应当调用CGContextRotateCTM函数,进行缩放变换应当调用CGContextScaleCTM函数。
2、UIBezierPath
使用UIBezierPath绘图的好处:采用系统坐标系 ,在Core Graphics的基础上封装,具有Core Graphics的主要功能,无需考虑图形环境。 UIBezierPath* pathLines = [UIBezierPath bezierPath]; [pathLines moveToPoint:point1]; // 移动到point1位置 [pathLines addLineToPoint:point2]; // 画一条从point1到point2的线 pathLines.lineWidth = 5.0; // 线宽 [UIColor redColor] set]; // 颜色设置 [pathLines stroke]; // 开始描绘 在同一UIBazierPath中,只能采用相同的颜色和线宽。